如何使用关键字“ new”创建不带尖括号的JComboBox?

时间:2019-07-07 07:20:56

标签: java swing user-interface jcombobox

我正在尝试构建一些小型应用程序(练习我已阅读的内容)。我正在使用JComboBox组件。根据Java API,JComboBox需要尖括号(<E>)。令人惊讶的是,在没有JComboBox的情况下使用<>也可以。我想了解它是如何工作的?

我还没有学会“泛型”(泛型如何在后台工作,如何创建泛型类),仅使用了它们。

String[] season = {"Winter","Summer","Spring","Fall"};
JComboBox someComboBox = new JComboBox(season);

在我期望编译错误的情况下它可以工作,但通知我必须在方括号内指定一个对象。

1 个答案:

答案 0 :(得分:1)

由于Java 7 JComboBoxgeneric 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