除了如何“使用它们”之外,我对泛型知之甚少。在我的应用程序中,我有各种 ListView Activity,它们似乎共享相似的方法和变量,并且在执行的步骤都非常相同的意义上具有完全相同的“算法”。
例如,在我的 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;
所以真正的主要区别在于每个不同的 Activity 会为列表使用不同的对象类型(即游戏、媒体、文章等)。我该怎么做呢?
最佳答案
我在想这样的事情:
public abstract class BaseListActivity<T> extends ListViewActivity {
private List<T> mItems;
protected abstract List<T> readAllFromXML();
...
}
参数 T 代表列表 Activity 实现所使用的实际类型。例如,派生类可能如下所示:
public TexyListActivity extends BaseListActivity<String> {
protected List<String> readAllFromXML() {
....
}
...
}
readAllFromXML 方法留给子类来实现,因为每个实现都为列表实例化不同的对象类型,因此它使用不同的逻辑从 XML 创建它们。
关于当涉及泛型(特别是 List)时,通过继承重用 Java 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3244524/