Этот вопрос связан с Android в том, что моя потребность существует в этом домене, но этот вопрос по-прежнему применяется к Java в целом; Я буду использовать некоторые условия Android здесь, такие как Activity
, FragmentActivity
, ListActivity
и т.д.
Мне нужно реализовать абстрактный базовый класс, который содержит функциональные возможности, которые должны использоваться во всем приложении, более конкретно каждый Activity
должен использовать эту функциональность, но я хочу, чтобы он обрабатывался автоматически базовым классом. Моя проблема заключается в том, что у меня есть много разных видов деятельности в приложении, таких как Activity
, FragmentActivity
и ListActivity
, все из которых расширяют Activity
(минус Activity
, конечно).
Поскольку код в базовом классе будет точно таким же для каждой реализации Activity
, существует ли способ избежать дублирования кода и необходимо создать базовый класс для каждого типа Activity
?
То, что я пытаюсь избежать:
public abstract class BaseActivity extends Activity
{
public void onCreate(Bundle savedBundle)
{
// code goes here, will be the exact same for all these base classes
}
}
public abstract class BaseFragmentActivity extends FragmentActivity
{
public void onCreate(Bundle savedBundle)
{
// code goes here, will be the exact same for all these base classes
}
}
public abstract class BaseListActivity extends ListActivity
{
public void onCreate(Bundle savedBundle)
{
// code goes here, will be the exact same for all these base classes
}
}
public class MyMainActivity extends BaseActivity
{
}
public class MyUserList extends BaseListActivity
{
}
public class SomeActivityThatNeedsToBeAFragment extends BaseFragmentActivity
{
}
Я пытался использовать для этого дженерики, используя что-то вроде следующего
public abstract class BaseActivity<T extends Activity> extends T
но, очевидно, это не сработает; или, может быть, я просто делаю это неправильно. Итак, есть ли способ выполнить повторное использование этого кода и избежать дублирования, или просто просто застрял, дублируя мой код?
Спасибо!