我正在尝试构建一些小型应用程序(练习我已阅读的内容)。我正在使用JComboBox
组件。根据Java API,JComboBox
需要尖括号(<E>
)。令人惊讶的是,在没有JComboBox
的情况下使用<>
也可以。我想了解它是如何工作的?
我还没有学会“泛型”(泛型如何在后台工作,如何创建泛型类),仅使用了它们。
String[] season = {"Winter","Summer","Spring","Fall"};
JComboBox someComboBox = new JComboBox(season);
在我期望编译错误的情况下它可以工作,但通知我必须在方括号内指定一个对象。
答案 0 :(得分:1)
由于Java 7 JComboBox
是generic type,这意味着在声明此类型的变量时,您应该通过提供来执行泛型类型调用。 > type参数,代表“此组合框的元素类型” [from the API]。
对于您而言,这意味着:
JComboBox<String> someComboBox = new JComboBox<>(season);
有趣的是,Java Tutorial on JComboBox似乎没有更新为JComboBox
的通用版本。
如果出于这种或其他原因,您希望在不进行泛型类型调用的情况下使用JComboBox
,则仍然可行,因为Java支持使用raw types。
原始类型是没有任何类型参数的泛型类或接口的名称。
因此,您可以将JComboBox
原始类型用作:
JComboBox someComboBox = new JComboBox(season);
尽管不建议这样做,但是如果您只是想尝试或按照本教程进行操作,那应该没什么大不了的。
如果发现编译器警告令人分心,则可以通过在IDE中适当设置编译器错误/警告属性来消除它们。另外,您可以使用@SuppressWarnings批注除去它们。如果编译器支持,则将注释实例添加到代码中应摆脱警告:
@SuppressWarnings({"rawtypes","unchecked"})
JComboBox box = new JComboBox(season);
有关@SuppressWarnings
的更多信息,另请参见this post。