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

Mic*_*rry 49 java generics swing jcombobox java-7

Java 7中的JCombobox已经更新为使用泛型 - 我一直认为它有点疏忽,它还没有,所以我很高兴看到这种变化.

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

这究竟是为什么?对我来说,这似乎是一个愚蠢的设计决定.我意识到底层的ListModel有一个通用的getElementAt()方法,所以我会用它来代替 - 但它有点迂回的做法,看起来它可能在JComboBox本身上被改变了.

jar*_*bjo 59

我想你指的是getSelectedItem()什么?

原因是如果组合框是可编辑的,则所选项目不一定包含在后备模型中,并且不限于泛型类型.例如,如果你有一个JComboBox<Integer>模型[1,2,3] 的可编辑,你仍然可以在组件中键入"foo"并getSelectedItem()返回字符串"foo"而不是Integer类型的对象.

如果组合框不可编辑,您始终可以遵循cb.getItemAt(cb.getSelectedIndex())以实现类型安全.如果没有选择,则返回null,这与行为相同getSelectedItem().