为什么不是JComboBox通用的getSelectedItem()?

Java 7中的JCombobox已经更新为使用generics – 我一直认为这是一个疏忽,它还没有,所以我很高兴看到这种变化。

但是,当试图以这种方式使用JCombobox时,我意识到我期望使用这些genericstypes的方法仍然只是返回Object.

这是为什么呢? 这对我来说似乎是一个愚蠢的devise决定。 我意识到底层的ListModel有一个通用的getElementAt()方法,所以我将使用它,但是这是一个迂回的做法,看起来像它可以在JComboBox本身上进行更改。

我想你引用getSelectedItem()

原因是如果combobox是可编辑的,选定的项目不一定包含在支持模型中,而不限制为通用types。 例如,如果对模型[1,2,3]有可编辑的JComboBox<Integer> ,则仍然可以在组件中键入“foo”,而getSelectedItem()将返回String“foo”,而不是Integertypes的对象。

如果combobox不可编辑,则总是可以按照cb.getItemAt(cb.getSelectedIndex())来实现types安全。 如果没有select,则返回null ,这与getSelectedItem()行为相同。