簡體   English   中英

Java Generics不兼容的類型linkedlist迭代器

[英]Java Generics incompatible types linkedlist iterators

嘗試為通用鏈表創建迭代器。 當我嘗試創建一個“當前”節點以便根據頭部標記迭代列表時,我得到一個不兼容的類型錯誤。 這是重要的線條

public class LinkedList<T> implements Iterable<T>
{
    private node<T> headsent;
    private node<T> tailsent; 
    public DistanceEventList()
    {
        headsent = new node<T>();
        tailsent = new node<T>();
        headsent.setnext(tailsent);
        tailsent.setprevious(headsent);
    }
    public node<T> getheadsent()
    {
        return headsent;
    }
    ...
    public MyIterator<T> iterator() {
        return new MyIterator<T>();
    }
    public class MyIterator<T> implements Iterator<T>
    {
        private node<T> current = getheadsent();
        public T next() {
            current = current.getnext();
            return current.getdata();
        }
    private class node<T> {
        private T data;
        private node<T> next;
        private node<T> previous;    
        ...
        public node<T> getnext()
        {
            return next;
        }
    }
}

並產生錯誤

LinkedList.java:65: error: incompatible types
private node<T> current = getheadsent();
required: LinkedList<T#1>.node<T#2)
found: LinkedList<T#1>.node<T#1)

好像我已經介紹了兩種不同類型的T,但我對於通用的確不太熟悉。 希望上面的代碼足以讓某人識別出錯誤(它已經過時了)。 謝謝!

您有兩種名稱相同的類型。

內部類共享在其外部類中聲明的類型變量。 所以,當你有

public class MyIterator<T> implements Iterator<T>
//                     ^^^

新類型聲明<T>遮蔽外部聲明。

private node<T> current = getheadsent();
//      ^^^^^^^           ^^^^^^^^^^^
//      inner T             outer T

你可以刪除聲明:

public class MyIterator implements Iterator<T>
//                    ^^^

暫無
暫無

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

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