Java:类型删除器实现

标签 java

这几天我正在学习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/

相关文章:

java - 异步UDP如何在java中从客户端获取ip和端口?

java - 使用字符串验证 SSN

java - 捕获 SAXParser 的字节数/偏移量

java - 如何修改此 Java 程序以从命令行指定的文件中读取名称?

java - iText:将现有 PDF 的颜色更改为灰度

java - Spring 应用程序失败,Autowire 在 main.class 中为 null

java - Retrofit + Instagram API 在请求访问 token 时返回错误 400

java - 这是最快的 : 3 Arraylist synchronized or a HashMap with custom structure as value

java - 查找所有排列代码问题 (Java)

java - 如何在 saxon 9.7+ s9api 中使用打包(导出)的样式表?