这些天我正在学习Java Generics。现在,我正在经历“Type Eraser”概念。我已经整理了一个基于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)
有人可以帮我理解导致问题的原因。由于我无法猜测发生了什么,我想我还没有正确理解桥接方法的概念。如果有人能解释一下桥接方法,那将会很有帮助。
答案 0 :(得分:2)
您试图在String
中添加Integer
值,这就是您遇到此异常的原因。
尝试使用parseInt()
,如下所示:
Integer x = Integer.parseInt(mn.data);