将项添加到JComboBox时出现警告

时间:2015-10-11 10:49:36

标签: java

我想在没有任何警告的情况下使用JComboBox,并且尽可能没有警告抑制。我想将一个String添加到JComboBox中。因此,通常,要将项目放在JComboBox中,我使用:

String list [] = {"Hello", "World"};
JComboBox <String> cboHello = new JComboBox <> (list);

此代码在我的编译中消除了这些警告:

Note: Sample.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

但是,如果我想将项目添加到JComboBox怎么办?我试过这些:

1. Object itObj = "Foo";
   cboHello.addItem(itObj);

2. cboHello.addItem("Foo");

3. cboHello.addItem <String> ("Foo");

第一个和第三个产生错误。第二个没有消除警告。我还检查了Java API文档并试试这个:

comboBox.addItem(makeObj("Item 1"));
private Object makeObj(final String item)  {
     return new Object() { public String toString() { return item; } };
}

但它也没有消除警告。我该怎么办?提前谢谢!

2 个答案:

答案 0 :(得分:1)

致电时

JComboBox <String> cboHello = new JComboBox <> (list);

您已将String作为JComboBox的泛型参数传递,这告诉JComboBox在其addItem方法中仅接受String。 (自Java 7以来,通用类型被引入JComboBox)

  • 第一个和第四个基本相同。您正在尝试将对象传递给仅接受String的方法。由于无法将对象隐式转换为String,因此必须显式转换它。

    cboHello.addItem((字符串)itObj);

  • 第二个是完全合法的,因为你将一个字符串传递给addItem,它只接受String作为参数

  • 第三个在语法上不正确。

答案 1 :(得分:0)

如果您只是添加字符串,(2)对我来说很好,并且不会给出任何编译器警告。

如果您要将对象添加到JComboBox,请将原始声明更改为:

JComboBox <Object> cboHello = new JComboBox<Object>(list);

然后你的方法(1)和(2)都没有警告或错误。

您可能会发现阅读有关Jave generics的更多信息很有用,这就是这些行为的来源。