2014-10-31 78 views
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) 

有人可以帮助我了解究竟是什么原因造成的问题。由于我无法猜测发生了什么,我认为我没有正确理解桥接方法的概念。如果有人能够解释一些桥梁方法,这将会有所帮助。

+1

你是不是类型转换的字符串中的整数对象存储看到更多information.http://stackoverflow.com/questions/5585779/how-to- convert-string-to-int-in-java – Ali786 2014-10-31 08:53:56

+1

问题是你已经选择忽略所有关于泛型的编译器警告,并以破碎的代码结束。尝试改变'Node n = mn;'到正确的'Node n = mn;'然后你会在'n.setData(“Hello”)得到一个合适的编译错误*;'因为你打电话给方法,它只接受一个I​​nteger,并带有一个String类型的参数。 – 2014-10-31 08:57:49

+0

我的回答对你有帮助吗?如果是的话,请接受它。 – 2015-06-30 07:47:56

回答

2

您正在尝试将String值置于Integer中,这就是为什么您得到此例外。

尝试使用parseInt()这样的:

Integer x = Integer.parseInt(mn.data);