我查看了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>();
任何人都可以解释两者初始化过程之间的差异吗? 列表似乎更直观,因为如果父级是通用的,那么孩子也应该是。
答案 0 :(得分:2)
ArrayAdapter<T>
实施ListAdapter
。这意味着它遵守ListAdapter的合同。在这种情况下,这只是意味着它实现了方法areAllItemsEnabled()
和isEnabled(int position)
。
ListAdapter没有理由采用泛型类型,因为这两种方法不涉及泛型类型。
答案 1 :(得分:1)
你是什么意思不通用?接口是非常通用的接口 - 它可以是任何类型数据的接口。它甚至不会强迫您访问该数据的特定数据结构,如数组或游标。
你的意思是为什么不采用泛型论证?因为ListAdapter实际上比它更通用 - 它不关心列表中的数据类型,因此它不需要泛型类型。请注意,它的所有功能都不需要它知道数据的类型。虽然List之所以会这样做是因为它提供了许多需要你知道类型的函数,比如添加和删除。