为什么 Spinner class 不提供仿制药?
Why does the Spinner class not offer generics?
如 what-is-a-raw-type-and-why-shouldnt-we-use-it 中所述,使用原始 classes 是邪恶的。
现在,微调器 .getSelectedItem()
return 是一个对象,它可以
return 正确的 class 如果它被初始化
Spinner<CorrectClass>
.
为什么会这样?
getSelectedItem()
是AdapterView
which return Adapter#getItem()
的一个方法。
所以问题是"Why the interface Adapter is not generic ?".
答案很简单,因为 Android 小部件 AdapterView 可用于存储不同类型的对象。适配器的目的是提供这些对象的一致视图。
如果您向接口 Adapter
(以及 AdapterView
和 Spinner
)添加通用参数,则您正在修复基础数据集合的类型,这与整体背道而驰适配器 东西。
想法是适配器视图不需要知道适配器背后的底层数据,因此它不需要限制其数据类型。
然而,您可以在自己的 SpinnerAdapter
实现中使用特定类型(或通用参数)专门化 Adapter
接口,然后通过 Adapter 而不是 AdapterView 访问数据:
yourAdapter.getItem(spinner.getSelectedItemPosition()).
如 what-is-a-raw-type-and-why-shouldnt-we-use-it 中所述,使用原始 classes 是邪恶的。
现在,微调器 .getSelectedItem()
return 是一个对象,它可以
return 正确的 class 如果它被初始化
Spinner<CorrectClass>
.
为什么会这样?
getSelectedItem()
是AdapterView
which return Adapter#getItem()
的一个方法。
所以问题是"Why the interface Adapter is not generic ?".
答案很简单,因为 Android 小部件 AdapterView 可用于存储不同类型的对象。适配器的目的是提供这些对象的一致视图。
如果您向接口 Adapter
(以及 AdapterView
和 Spinner
)添加通用参数,则您正在修复基础数据集合的类型,这与整体背道而驰适配器 东西。
想法是适配器视图不需要知道适配器背后的底层数据,因此它不需要限制其数据类型。
然而,您可以在自己的 SpinnerAdapter
实现中使用特定类型(或通用参数)专门化 Adapter
接口,然后通过 Adapter 而不是 AdapterView 访问数据:
yourAdapter.getItem(spinner.getSelectedItemPosition()).