任何人都可以解释为什么listAdapter不采用泛型参数?

时间:2014-06-26 18:12:36

标签: java android generics listadapter

我查看了http://developer.android.com/reference/android/widget/ListAdapter.html并看到ListAdapter是一个公共界面。据我所知ArrayAdaptor实现了ListAdaptor。要创建ArrayAdaptor引用类型ListAdaptor的实例,我的代码为:

ListAdapter adaptor = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);

(这个编译好了)。

我的问题是为什么ListAdapter没有采用任何通用参数?

我尝试将其与使用List(公共接口)引用创建数组列表进行比较。要做到这一点,我的代码是:

 List<String> l = new ArrayList<String>();

任何人都可以解释两者初始化过程之间的差异吗? 列表似乎更直观,因为如果父级是通用的,那么孩子也应该是。

2 个答案:

答案 0 :(得分:2)

ArrayAdapter<T>实施ListAdapter。这意味着它遵守ListAdapter的合同。在这种情况下,这只是意味着它实现了方法areAllItemsEnabled()isEnabled(int position)

ListAdapter没有理由采用泛型类型,因为这两种方法不涉及泛型类型。

答案 1 :(得分:1)

你是什么意思不通用?接口是非常通用的接口 - 它可以是任何类型数据的接口。它甚至不会强迫您访问该数据的特定数据结构,如数组或游标。

你的意思是为什么不采用泛型论证?因为ListAdapter实际上比它更通用 - 它不关心列表中的数据类型,因此它不需要泛型类型。请注意,它的所有功能都不需要它知道数据的类型。虽然List之所以会这样做是因为它提供了许多需要你知道类型的函数,比如添加和删除。