2016-08-13 69 views
1

於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); 
    } 
} 

類型擦除後,節點和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); 
    } 
} 

後方法變爲setData(Object)MyNode方法變爲setData(Integer)

爲什麼MyNode方法不成爲setData(Object)?爲什麼Integer未被擦除?

回答

0

爲什麼MyNode方法不能成爲setData(Object)?爲什麼「Integer」不會被刪除?

MyNodesetData定義爲:

public void setData(Integer data) 

即,它不具有一般類型參數。因此沒有東西被抹去。 data的論點仍然是Integer

+0

你是對的。只有Node類具有泛型類型參數。謝謝。 –