2017-07-02 8 views
1

此代碼有一個轉換錯誤,我不確定爲什麼發生。自制泛型List類中的轉換錯誤

的錯誤是:

List.java:131: error: incompatible types: Comparable cannot be converted to T 
     this.insertAtFront(remove.firstNode.data); 

它進來,在列表中使用。數據爲ListNode代碼的每一部分。

我標記了執行錯誤的行。

任何想法?

public class List<T extends Comparable<T>> { 

private ListNode firstNode; 
private ListNode lastNode; 
private String name; 

public List(String listName){ 
    name=listName; 
    firstNode=lastNode=null; 
} 

public T removeAt(int k) throws ListIndexOutOfBound { 
    List remove = new List(); 
    T o; 
    if(k < 0 || k > checkSize()) throw new ListIndexOutOfBound(); 
    for(int i = 0; i < k; i++){ 
     try { 
      remove.insertAtFront(firstNode.data); 
      this.removeFromFront(); 
     } catch (Exception e) { 
      while(!remove.isEmpty()){ 
       this.insertAtFront(**remove.firstNode.data**); 
       remove.removeFromFront(); 
      } 
      throw new ListIndexOutOfBound(); 
     } 
    } 
    **o = firstNode.data;** 
    this.removeFromFront(); 
    while(!remove.isEmpty()){ 
     this.insertAtFront(**remove.firstNode.data**); 
     remove.removeFromFront(); 
    } 
    return o; 
} 
} 

這就是ListNode類:

public class ListNode<T extends Comparable<T>> { 

T data; 
ListNode nextNode; 

public ListNode(T o){ 
    this(o,null); 
} 

public ListNode(T o, ListNode node){ 
    data = o; 
    nextNode = node; 
} 

public T getObject(){ 
    return data; 
} 
} 
+1

'ListNode '?。 –

+0

@OliverCharlesworth它修復o = firstNode.data;但不是其他的 – matanm

+0

爲什麼'firstNode'和'lastNode'和'nextNode'類型爲'ListNode'而不是'ListNode ''? –

回答

0

當你看到你的List類,你會發現,無論對於firstNode和lastNode的定義不包含泛型類型的信息!

因此改變,要

ListNode<T> firstNode 

和問題應該消失。創建「刪除」列表時也是如此。

省略通用信息創建所謂的原始類型。每當你這樣做時,你會收到警告。不要忽視該警告 - 只需修復您使用原始類型的所有地方!

+0

我試圖做到這一點,但它不修復remove.firstNode.data; – matanm

+0

你告訴我之後立即做了這件事,但遺憾的是它沒有修復代碼。 – matanm

+0

您需要聲明'remove'爲'List '並將其創建爲'new List <>()'。 –