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())