我想在没有任何警告的情况下使用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; } };
}
但它也没有消除警告。我该怎么办?提前谢谢!
答案 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的更多信息很有用,这就是这些行为的来源。