为什么Spinner类不提供泛型?

时间:2015-07-31 09:33:50

标签: java android android-spinner api-design

what-is-a-raw-type-and-why-shouldnt-we-use-it中所述,使用原始类是邪恶的。

现在,Spinner .getSelectedItem()返回一个可以的对象 如果使用初始化,则返回正确的类 Spinner<CorrectClass>

为什么会这样?

1 个答案:

答案 0 :(得分:2)

getSelectedItem()AdapterView返回Adapter#getItem()的方法。 所以问题是&#34;为什么接口适配器不是通用的?&#34;

答案很简单,因为Android小部件AdapterView可用于存储不同类型的对象。适配器的目的是提供这些对象的一致视图。

如果您将通用参数添加到接口Adapter(以及AdapterViewSpinner),那么您正在修复与整个适配器的事情。

这个想法是适配器视图不需要知道适配器背后的底层数据,因此它不应该限制其数据类型。

然而,您可以在自己的Adapter实现中使用特定类型(或通用段)专门化SpinnerAdapter接口,然后通过适配器而不是AdapterView访问数据:

yourAdapter.getItem(spinner.getSelectedItemPosition()).
相关问题