2013-07-03 91 views
5

我想弄清楚整個Java泛型主題。Java通用方法的參數

更具體地說這個問題:

public class Node<E>{ 
    private E data; 
    public Node(E data){ 
     this.data=data; 
    } 
    public E get(){ 
     return this.data; 
    } 
    public void set(E data){ 
     this.data=data; 
    } 
} 

我如何添加一個「擴展」通配符指定的設置方法可以收發E 任何繼承類E(在這種情況下,節點將保持參數的上傳版本)。

或者它會工作,即使我離開它的方式?

(我可能會有點混淆泛型類型的不變的方面。)

謝謝!

+3

它將已經做你想要的... –

+0

我downvoted這個問題。如果你自己做一點點工作,它很容易回答。你甚至不需要谷歌,只需在任何Java IDE中使用ctrl-space並親自查看。 – Dariusz

+0

@Dariusz你可以隨心所欲地做任何事情。 問題是,即使你不知道爲什麼或者它有多好,代碼有時也會「工作」。 這就是爲什麼我在這裏問。 – Paz

回答

3

你的班級已經在做你所需要的。讓我們以身作則。可以說你已經創建了Node(Number是超類Integer,Long等);

Node<Number> numberNode = new Node<Number>(1); 

你可以通過它的子類也

​​
3

你宣佈你的類Node<E>它已經接受任何繼承類E

+2

與將泛型傳遞爲泛型有何區別?因爲當我們寫'someMethod(ArrayList )'時,只有類型爲'E'的arrayLists可以被傳遞。 –

+2

@PrasadKharkar好發現!是的,他們是不同的。 – johnchen902

+0

哦......好吧,然後:)添加到知識。謝謝 –

0

如果使用

public void set(E extends SomeType){ 
this.data=data; 
} 

那麼你可以傳遞任何對象implements or extends SomeType Remeber是SomeType也可以是一個interface這裏,哪怕是陌生的,我們需要寫E extends SomeType

0

調用設置方法還是會工作...?

或者你tried it out if it works

 final Node<Number> n = new Node<Number>(new Integer(666)); 
     System.out.println(n.get()); 
     n.set(new Integer(777)); 
     System.out.println(n.get());