簡體   English   中英

當涉及泛型時(特別是List),通過繼承重用Java代碼?

[英]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(); 

並用來舉辦GameMediaArticle類的課程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM