Java 为什么Spinner类不提供泛型?
如中所述,使用原始类是邪恶的 现在,微调器Java 为什么Spinner类不提供泛型?,java,android,android-spinner,api-design,Java,Android,Android Spinner,Api Design,如中所述,使用原始类是邪恶的 现在,微调器.getSelectedItem()返回一个它可以返回的对象 如果使用初始化,则返回正确的类 微调器 为什么会这样?getSelectedItem()是一种返回的方法。 所以问题是“为什么接口适配器不是泛型的?” 答案很简单,因为Android小部件AdapterView可以用来存储不同类型的对象。适配器的目的是提供这些对象的一致视图 如果您向接口适配器(和适配器视图,以及微调器)添加一个通用参数,那么您正在修复与整个适配器相关的基础数据收集类型 其思想
.getSelectedItem()
返回一个它可以返回的对象
如果使用初始化,则返回正确的类
微调器
为什么会这样?getSelectedItem()
是一种返回的方法。
所以问题是“为什么接口适配器不是泛型的?”
答案很简单,因为Android小部件AdapterView可以用来存储不同类型的对象。适配器的目的是提供这些对象的一致视图
如果您向接口适配器
(和适配器视图
,以及微调器
)添加一个通用参数,那么您正在修复与整个适配器相关的基础数据收集类型
其思想是适配器视图不需要知道适配器背后的底层数据,因此它不需要约束其数据类型
但是,您可以在自己的SpinnerAdapter
实现中使用特定类型(或通用参数)专门化适配器
接口,然后通过适配器而不是AdapterView访问数据:
yourAdapter.getItem(spinner.getSelectedItemPosition()).
你知道为什么
ArrayAdapter
有泛型吗?@user1587329这是概念的选择,一辆ArrayAdapter
汽车只处理一种数据。将这种约束放在一个特定的实现中(考虑到一个特定的用例)比放在整个通用接口上更容易。不过,微调器
也可以通过使用原始类型的选项来键入,n'est-ce pas?微调器
是AdapterView
的专门化。其思想是适配器视图不需要知道适配器背后的底层类型,因此它不需要约束适配器的数据类型。如果要专门化适配器类型,请在自己的SpinnerAdapter
实现中执行,不要调用spinner.getSelectedItem()
,而是yourAdapter.getItem(spinner.getSelectedItemPosition())
。