簡體   English   中英

在自制的通用List類中轉換錯誤

[英]Convert error in self-made generic List class

這段代碼有一個轉換錯誤,我不確定為什么會發生。

錯誤是:

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

它出現在使用List.List的.data的代碼的每一部分中。

我標記了執行錯誤的行。

有任何想法嗎?

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

當您查看List類時,您會發現firstNode和lastNode的定義都不包含通用類型信息!

所以將其更改為

ListNode<T> firstNode 

這個問題應該消失了。 與創建“刪除”列表時相同。

省略通用信息會創建所謂的原始類型。 每次您都會收到警告。 不要忽略該警告-只需修復所有使用原始類型的地方!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM