我有這個通用節點類:class Node<E> { private E data; private Node<E> link; public Node(E d) { data = d; link = null; } public Node(E d, Node<E> l) { data = d; link = l; } public void AddNodeAfter(E d) { link = new Node<E>(d, link); } }我的主要課程有兩行:Node<int> n1 = new Node<int>(100);n1.AddNodeAfter(4.4); //error here這條線n1.AddNodeAfter(4.4)給了我一個Argument 1: cannot convert from 'double' to 'int'我不完全理解的錯誤。據我所知,最后一個節點包含一個int作為它data的節點,但該節點是通用的,所以我假設下一個節點是什么并不重要,因為data可以從一個節點改變到另一個節點。但顯然我錯過了一些東西。所以我的問題是為什么我會在泛型類中收到這個轉換錯誤?
3 回答

一只萌萌小番薯
TA貢獻1795條經驗 獲得超7個贊
你沒有錯過任何東西。你定義了你的泛型類型int并且你傳遞double給AddAfterNode方法
您的方法將變為:
public void AddNodeAfter(int d)
{
link = new Node<int>(d, link);
}
所以你不能通過除了 int
如果您希望代碼正常工作,只需更改int為object.
還有更好的方法可以做到這一點。

慕后森
TA貢獻1802條經驗 獲得超5個贊
泛型用于為類創建一種“模板”,這是一種參數化類使用的特定類型的方法。Node<int>
在本質上創建一個基于一個新的類Node<E>
,所有E
的與取代的int
,所以類型link
是Node<int>
你的n1
實例。您也可以自由創建Node<double>
實例,只是不能根據您的類型定義將它們鏈接在一起。
如果你想在你的節點中真正容納任何類型的對象,你需要有一個更靈活的類型,比如Object
你的節點數據,如果你需要獲取數據的類型,請使用反射之類的東西。
- 3 回答
- 0 關注
- 226 瀏覽
添加回答
舉報
0/150
提交
取消