[英]Java code reuse through Inheritance when generics are involved (List in particular)?
除了如何“使用它們”外,我對泛型幾乎一無所知。 在我的應用程序中,我有各種ListView活動,它們似乎共享相似的方法和變量,並且在執行步驟都非常相同的意義上具有確切的“算法”。
例如,在我的onCreate方法中,我調用一種方法來添加頁腳,啟動進度對話框,調用一種方法以基於xml url獲取內容,並且有一個Handler和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;
因此,真正的主要區別在於,每個不同的活動將為列表使用不同的對象類型(即游戲,媒體,文章等)。 我將如何去做呢?
我在想類似的東西:
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創建它們。
適配器示例可以嗎?
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 {
//
}
}
定義模板列表
List<E> mObjItems = new ArrayList();
並用來舉辦Game
, Media
或Article
類的課程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.