这几天我正在学习Java泛型。现在,我正在研究“橡皮擦”的概念。我根据 this 编写了一个小型 java 程序。这是我的完整代码:
/*
* Bridge method demonstration
*/
class Node<T>{
public T data;
public Node(T data){
this.data = data;
}
public void setData(T data){
System.out.println("Node.setData");
this.data = data;
}
}
class MyNode extends Node<Integer>{
public MyNode(Integer data){ super(data); }
public void setData(Integer data){
System.out.println("MyNode.setData");
super.setData(data);
}
}
现在,以下代码抛出 ClassCastException:
// Bridge method demo
System.out.println("Demonstrating bridge method:");
MyNode mn = new MyNode(5);
Node n = mn;
n.setData("Hello");
Integer x = mn.data;
错误:
Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
at MyNode.setData(genericfirst.java:96)
at genericfirst.main(genericfirst.java:177)
有人可以帮助我了解到底是什么导致了这个问题吗?由于我无法猜测发生了什么,我认为我没有正确理解桥接方法的概念。如果有人也能解释一下桥接方法,那将会很有帮助。
最佳答案
您试图将 String
值放入 Integer
中,这就是您收到此异常的原因。
尝试像这样使用parseInt()
:
Integer x = Integer.parseInt(mn.data);
关于Java:类型删除器实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26670531/