Повторное использование кода Java через Inheritance, когда используются дженерики (перечислите, в частности)?

1

У меня очень мало знаний о дженериках, кроме как "использовать их". В моем приложении у меня есть различные функции ListView, которые, похоже, используют похожие методы и переменные и имеют точный "алгоритм" в том смысле, что все выполненные шаги все одинаковы.

Например, в моем методе onCreate я вызываю метод для добавления нижнего колонтитула, запуска диалогового окна выполнения, вызова метода для получения контента на основе URL-адреса xml, и есть поля обработчика и Runnable, которые используются для вызова метода заполните данные для списка, когда выполняется синтаксический анализ xml.

Я думал, может быть, я могу создать BaseListActivity, который делает все эти вещи/имеет методы для всех этих вещей, и каждый конкретный ListActivity может быть расширен от этого. Проблема в том, что они используют объект List для хранения элементов, которые анализируется xml и под которым поддерживается ListAdapter.

Итак, вот код используемых полей:

// list of games from xml
private List<Game> mGames = new ArrayList<Game>();
private List<Game> mNewGames = null;

// Need handler for callbacks to the UI thread
private final Handler mHandler = new Handler();

// Create runnable for posting
final Runnable mUpdateResults = new Runnable() {
    public void run() {
        mGames.addAll(mNewGames);
        fillData();
    }
};

LayoutInflater mInflater = null;
private ProgressDialog mProgressDialog = null;
private int currentPage = 0;

так что главное отличие состоит в том, что каждая другая деятельность будет использовать другой тип объекта для List (например, Game, Media, Article и т.д.). Как я могу это сделать?

Теги:
generics
oop
inheritance

3 ответа

1
Лучший ответ

Я думаю о чем-то вроде:

public abstract class BaseListActivity<T> extends ListViewActivity {
    private List<T> mItems; 

    protected abstract List<T> readAllFromXML();
    ...

}

Параметр T обозначает фактический тип, с которым работает реализация списка. Например, производный класс может выглядеть так:

public TexyListActivity extends BaseListActivity<String> {
    protected List<String> readAllFromXML() {
        ....
    }
    ...
}

Метод readAllFromXML оставлен для реализации подклассов, поскольку каждая реализация создает экземпляры разных типов объектов для списка, поэтому для их создания из XML используется другая логика.

1

Будет ли пример адаптера?

public abstract class OnlineListAdapterTyped<T> extends BaseAdapter {

private final ArrayList<T> items = new ArrayList<T>();

    @Override
    public final T getItem(int position) {
        return items.get(position);
    }

    protected abstract T deserialize(JSONObject obj) throws JSONException;
}

public class CategoriesAdapter extends
        OnlineListAdapterTyped<CatalogAppCategory> {

    @Override
    protected CatalogApp deserialize(JSONObject obj) throws JSONException {
    //
    }
}
-1

Определите шаблонный список

List<E> mObjItems = new ArrayList(); 

и использовать для хранения таких классов, как Game, Media или Article.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню