我正在尝试构建一些小的应用程序(练习我读过的内容)。我使用的是JComboBox
组件。根据Java API,JComboBox
需要尖括号(<E>
)。令人惊讶的是,在不使用<>
的情况下使用JComboBox
也是可行的。我正在尝试理解它是如何工作的?
我还没有学习“泛型”(它如何在后台工作,如何创建泛型类),只使用了它们。
String[] season = {"Winter","Summer","Spring","Fall"};
JComboBox someComboBox = new JComboBox(season);
当我预计会出现编译错误时,它会正常工作,但它会通知我必须在括号内指定一个对象。
发布于 2019-07-09 00:53:06
由于Java7 JComboBox
是一个generic type,这意味着在声明此类型的变量时,您需要通过提供一个表示“此组合框的元素的类型”[from the API]的类型参数来执行泛型类型调用。
在您的情况下,这意味着:
JComboBox<String> someComboBox = new JComboBox<>(season);
有趣的是,Java Tutorial on JComboBox似乎没有更新到JComboBox
的通用版本。
如果由于这个或任何其他原因,您希望在不执行泛型类型调用的情况下使用JComboBox
,这仍然是可能的,因为Java支持使用。
原始类型是没有任何类型参数的泛型类或接口的名称。
因此,您可以像这样使用JComboBox
原始类型:
JComboBox someComboBox = new JComboBox(season);
虽然不推荐这样做,但如果您只是想尝试或学习本教程,那么这应该不是什么大问题。
如果您发现编译器警告令人分心,则可以通过在IDE中适当设置编译器错误/警告属性来消除它们。或者,您可以使用@SuppressWarnings注释来消除它们。如果编译器支持,将注释实例添加到代码中应该会消除警告:
@SuppressWarnings({"rawtypes","unchecked"})
JComboBox box = new JComboBox(season);
有关@SuppressWarnings
的更多信息,请参阅this post。
https://stackoverflow.com/questions/56920111
复制相似问题