当涉及泛型(特别是 List)时,通过继承重用 Java 代码?

标签 java android generics inheritance oop

除了如何“使用它们”之外,我对泛型知之甚少。在我的应用程序中,我有各种 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/

相关文章:

java - JPanel 在 JScrollPane 中不可见

java - Java中是否有等效的TweenMax

带闭包的 Swift 泛型函数

java - 引用类型依赖 - 将 Map.Entry 声明为依赖于为 TreeMap 声明的泛型类型

java - Eclipse Maven : SLF4J: Class path contains multiple SLF4J bindings

java - build 学生类(class)

Android - sendTextMessage 消息未显示在 SMS 应用程序中

Android 相机 Intent 在 RESULT_OK 情况下不返回

generics - Kotlin继承/泛型声明

java - Hibernate @Version - 命中数据库