[英]ActionEvent.getSource: how to cast properly the source Object
我担心我可能在这里犯了一个新手错误。 我有下面的ActionListener
,但我在if
语句中收到警告Unchecked cast: 'java.lang.Object' to 'javax.swing.JComboBox<java.lang.String>'
。 我该如何解决? 我想从JComboBox
API 调用一个方法。
我对压制警告不感兴趣。
public class MyActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent actionEvent) {
Object source = actionEvent.getSource();
JComboBox<String> comboBox;
if (source instanceof JComboBox) {
comboBox = (JComboBox<String>) source;
}
}
}
要在不抑制的情况下删除警告,您必须与泛型妥协并将代码更改为:
JComboBox<?> comboBox;
if (source instanceof JComboBox) {
comboBox = (JComboBox<?>) source;
}
如果您打算使用JComboBox
中使用通用<E>
任何方法,您可以在那里使用强制转换。 例如:
String s = (String) comboBox.getItemAt(0);
解释:
发出警告是因为编译器无法知道您的JComboBox
是JComboBox<String>
还是JComboBox<Integer>
。
转换是运行时的事情,Java 中的泛型只是占位符,以确保类型安全并使代码更具可读性。 使用类型擦除,编译器在生成字节码时使用强制转换语句更新/修改所有涉及泛型的语句(更多信息请点击此处)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.