【问题标题】:How can JComboBox be created with keyword "new" and without angle brackets?如何使用关键字“new”而不带尖括号创建 JComboBox?
【发布时间】:2019-11-17 02:16:14
【问题描述】:

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

我还没有学过“通用”(它如何在后台工作,如何成为通用类),只使用过它们。

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

它在我预期会出现编译错误时工作,但通知我必须在括号内指定一个对象。

【问题讨论】:

  • 泛型就是这样工作的,请参阅this 问题。在我看来,@Harshad Ranganathan 的回答很好。
  • "没有 也可以",但你会收到警告
  • @MoritzSchmidt,谢谢。附加链接中有很好的解释

标签: java swing user-interface jcombobox


【解决方案1】:

由于 Java 7 JComboBoxgeneric type,这意味着在声明此类型的变量时,您需要通过提供 type 参数来执行 泛型类型调用 /em> 表示“此组合框元素的类型”[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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    • 2020-09-18
    • 2011-09-28
    • 1970-01-01
    • 2015-08-11
    • 2021-08-06
    相关资源
    最近更新 更多