java - 对类型删除和桥接方法感到困惑

标签 java generics

Java™ 教程 https://docs.oracle.com/javase/tutorial/java/generics/bridgeMethods.html 显示一个示例:

public 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;
    }
}

public class MyNode extends Node<Integer> {
    public MyNode(Integer data) { super(data); }

    public void setData(Integer data) {
        System.out.println("MyNode.setData");
        super.setData(data);
    }
}

类型删除后,Node 和 MyNode 类变为:

public class Node {

    public Object data;

    public Node(Object data) { this.data = data; }

    public void setData(Object data) {
        System.out.println("Node.setData");
        this.data = data;
    }
}

public class MyNode extends Node {

    public MyNode(Integer data) { super(data); }

    public void setData(Integer data) {
        System.out.println("MyNode.setData");
        super.setData(data);
    }
}

类型删除后,Node 方法变为 setData(Object)MyNode 方法变为 setData(Integer)

为什么MyNode方法没有变成setData(Object)?为什么Integer不会被删除?

最佳答案

Why does the MyNode method not become setData(Object)? Why does "Integer" not be erased?

MyNodesetData 定义为:

public void setData(Integer data)

即它没有泛型类型参数。因此,没有什么可以删除的。 data 参数仍然是 Integer

关于java - 对类型删除和桥接方法感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38932085/

相关文章:

java - 使使用泛型的类的方法能够返回其自身及其子类实例

arrays - 通用异步数组的 enumerate() 方法

Java 泛型,检测超出范围的字节

c#从 "byte"类型转换为 "generic" "K"类型

java - Spring 启动 : RestTemplate postForObject 400 bad request

Java 并发 - 队列效率高于列表

Java - 为 JDialog 设置大小

java - 如何获取以前的网址?

java - 如何在jsp中访问owl文件

java - 构造函数泛型问题