java - ActionEvent.getSource:如何正确转换源对象
问题描述
我担心我可能会在这里犯一个新手错误。我有以下内容,但我在声明中ActionListener
收到警告。我该如何解决?我想从API 调用一个方法。Unchecked cast: 'java.lang.Object' to 'javax.swing.JComboBox<java.lang.String>'
if
JComboBox
我对压制警告不感兴趣。
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
使用 generic 的方法<E>
,你可以在那里使用强制转换。例如:
String s = (String) comboBox.getItemAt(0);
解释:
发出警告是因为编译器无法知道您JComboBox
是 aJComboBox<String>
还是 a JComboBox<Integer>
。
强制转换是运行时的事情,Java 中的泛型只是占位符,以确保类型安全并使代码更具可读性。使用类型擦除,编译器在生成字节码时更新/修改所有涉及泛型和强制转换语句的语句(更多信息在这里)。
推荐阅读
- javascript - 当元素的显示从“无”变为“块”时按钮移动
- java - 列表类型的 Java 泛型用法
- c++ - std::pair 的初始化列表
, 双> - windows - 自动安装 NDIS 过滤器驱动程序
- php - 通过 html 表单 php 加载、编辑和更新 xml 文件
- algorithm - 判断数组中是否有名人
- windows - WINDOWS“启动cmd”让我发疯(设置颜色)
- julia - 如何向 Julia 中的特定 URL 发出请求?
- python-3.6 - 在两个字符串中查找相同的单词序列
- python - 从按升序排序的数组中返回大于给定数字的最小数字的索引的 C 函数