0
我正在学习Java泛型,这些天。现在,我正在经历“类型橡皮擦”的概念。我已经编制了一个基于this的小型Java程序。这是我的完整代码: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)
有人可以帮助我了解究竟是什么原因造成的问题。由于我无法猜测发生了什么,我认为我没有正确理解桥接方法的概念。如果有人能够解释一些桥梁方法,这将会有所帮助。
你是不是类型转换的字符串中的整数对象存储看到更多information.http://stackoverflow.com/questions/5585779/how-to- convert-string-to-int-in-java – Ali786 2014-10-31 08:53:56
问题是你已经选择忽略所有关于泛型的编译器警告,并以破碎的代码结束。尝试改变'Node n = mn;'到正确的'Node n = mn;'然后你会在'n.setData(“Hello”)得到一个合适的编译错误*;'因为你打电话给方法,它只接受一个Integer,并带有一个String类型的参数。 –
2014-10-31 08:57:49
我的回答对你有帮助吗?如果是的话,请接受它。 – 2015-06-30 07:47:56