2014-09-12 51 views
-3

我有一個具有泛型類型的類。如何將int轉換爲泛型Type T

自從我使用泛型以來,使用addNode()添加任何類型的對象(我想在Mylist上添加)很不錯,很容易。但是,如果我想添加(int) 5而我在類。我怎麼能做到這一點? (請參閱下面的代碼評論)。

class MyList <T> 
{ 
    Node <T> head = null; 
    public void addNode(T element) { 
     head = new Node <T> (element); 
    } 
    //Other methods removed for simplicity 

    public void myMethod() { 
     MyList <T> newList = new MyList <T>(); 

     //Below code generate error: required: T, found: int 
     newList.addNode(5); //How to add an int 5 here when it is expecting Type:T? 
    } 
} 

class Node <T> 
{ 
    T element; 
    public Node(T item) 
    { 
     element = item; 
    } 
    //Other methods removed for simplicity 
} 
+1

Java如何知道'T'會被綁定到'Integer'? – 2014-09-12 21:19:23

+0

是的,就是這個問題。我們如何克服這個問題? – user3437460 2014-09-12 21:21:10

+1

聲明你的'newList'爲'MyList newList = ...'。 – 2014-09-12 21:21:40

回答

5
class MyList<T> { 
    // ... 

    public void addNode(T element) { 
     // ... 
    } 

    public void myMethod() { 
     MyList<T> newList = new MyList<T>(); 

     newList.addNode(5); // <- can't do that! 
    } 
} 

如果你能添加一個整數那裏,類就不能通用了。它會擊敗目的。

在這個類中使用MyList以外的方法,你可以這樣做:

void another() { 
    MyList<Integer> list = new MyList<Integer>(); 
    list.addNode(5); 

    MyList<String> list2 = new MyList<String>(); 
    list.addNode("hello"); 
} 

UPDATE

,如果我需要添加了整數和節點對象到列表中呢?有什麼辦法可以做到嗎?

可能做到這一點,不過呢,有什麼模板參數變得毫無意義,你正在失去正確的類型檢查功能。通常你不應該這樣做。

MyList<Object> list3 = new MyList<Object>(); 
list3.addNode(12); 
list3.addNode("heya"); 
+0

如果我需要將Integer和Nodes對象添加到列表中,該怎麼辦?有什麼辦法可以做到嗎? – user3437460 2014-09-12 21:25:57

+0

我又增加了一個例子,但我不推薦使用它。 – janos 2014-09-12 21:31:46

+1

@janos在Java 8中,您可以創建一個POJO'Node'類型並使用兩個'Optional '字段。 – 2014-10-17 00:45:43