Несколько суперклассов и повторное использование кода

Этот вопрос связан с Android в том смысле, что моя потребность существует в этом домене, но вопрос по-прежнему относится к Java в целом; Я буду использовать некоторые условия Android здесь, такие как Activity , FragmentActivity , ListActivity и т. Д.

Мне нужно реализовать абстрактный базовый класс, который содержит функциональные возможности, которые должны использоваться во всем приложении, более конкретно, каждое действие должно использовать эту функциональность, но я хочу, чтобы он обрабатывался автоматически базовым классом. Моя проблема заключается в том, что у меня есть много разных видов деятельности в приложении, таких как 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 

Но, очевидно, это не сработает; Или, может быть, я просто делаю это неправильно. Итак, есть ли способ выполнить повторное использование этого кода и избежать дублирования, или просто просто застрял, дублируя мой код?

Благодаря!

Часто использование фрагментов может помочь в решении этой проблемы. В вашем конкретном случае, хотя я вижу, что вы также хотите использовать ListActivity. Это затрудняет

Как вы знаете, Java не может вам помочь. Вы не можете наследовать несколько реализаций (List и MyBase). Нет простого ответа. Я могу предложить две вещи:

  • Список (Activity, Fragment) – довольно простые расширения для базовых классов. Вы могли бы с разумным объемом работы создать свой собственный, который наследуется от вашего базового класса. Они, вероятно, были бы проще, чем те, которые были в рамках. Может быть, все будет хорошо.

  • Делегат. Напишите класс, который реализует общее поведение, но не наследует от Activity / Fragment. Создайте один из этих объектов во время инициализации ваших разделов Fragment / Activity. В любое время, когда есть общее поведение, делегируйте его экземпляру делегата.

Создайте абстрактный класс под названием BaseActivity . onCreate() для него, который должен охватывать основы операций. Создайте другие классы, которые простираются от BaseActivity , и позволяют им переопределять этот метод тогда и только тогда, когда они делают что-то немного более особенное, чем BaseActivity .

Основная идея здесь заключается в том, что любая Activity вы имеете или создаете, в какой-то мере связана с тем, что они выполняют аналогичные операции с кодом. Только в особых случаях вам нужно будет сделать что-то дополнительное, отсюда переопределить onCreate() .

Intereting Posts
Resource.designer.cs НЕ регенерируется в моно (Xamarin Studio) PDFJet-Open-source: как установить многострочный текст внутри объекта Cell Провайдер "gps" неизвестный исключение при попытке удалитьTestProvider Android – приемник вещания в сети не получает намерения Пример кода куса Androidusync Поэтапное развертывание с несколькими APK SENSOR_DELAY_GAME: сколько это? Как создать пользовательский веб-просмотр в Android? Android: восстановление фрагмента после изменения ориентации экрана Почему softkeyboard не отображается во Фрагменте с помощью WebView Java.lang.IncompatibleClassChangeError, вызванный экземпляром ActivityTestRule Получите частоту аудиофайла через каждые 1/4 секунды в android Динамическая настройка ссылок на текст в strings.xml Есть ли какой-либо Android-обработчик, который позволяет узнать, отключен ли планшет или мобильный телефон от электрического тока? Доступ к внутреннему хранилищу телефона для ввода файла базы данных SQLite