簡體   English   中英

為什么內部類會抱怨泛型類型?

[英]Why does the inner class complain about generic type?

我有一個實現Iterable的類,以便用戶可以使用迭代器。 我正在使用泛型來允許用戶使用任何類型並使用該類。

這是下面的工作代碼,沒有任何警告 -

public class CustomStackUsingArray<Type> implements CustomList<Type>, Iterable<Type> {

    Type []arr;

    public Iterator<Type> iterator() {
        return (new ListIterator());
    }

    private class ListIterator implements Iterator<Type>{
        //Implement Iterator here
    }

    //Implement other methods here
}

但是,如果我將ListIterator定義為這樣 -

private class ListIterator<Type> implements Iterator<Type>

我在Eclipse中收到警告, The parameter Type is hiding the type Type

為什么我在課后指定泛型類型時會抱怨? 為了讓我能夠在課堂上使用Type,我不應該這樣做嗎? 我在定義CustomStackUsingArray時添加了Type ,並且工作正常。

當你說class Something<T> (可能有多個類型參數)時,你告訴編譯器你正在定義一個新的泛型類,以T為參數。 您可以說private class ListIterator<Type2> implements Iterator<Type2> ; 這本來是合法的,但不是你想要的。 它會創建一個新的泛型類,其中Type2引用新類型參數的名稱。 當你說private class ListIterator<Type> implements Iterator<Type> ,你實際上做的完全相同,但是使用名為Type而不是Type2的類型參數。 Type與外部類的Type無關。 此外,在這個新類中,每當你說Type ,你指的是new type參數,這意味着你不能再引用外部類型參數 - 它是隱藏的,這就是Eclipse告訴你的。

這一切都發生是因為您告訴編譯器您想要創建一個新的泛型類。 但你真的沒有。 你只想要一個內部類,它是你定義的外部泛型類的一部分(我認為)。 因此,您需要取消第一個<Type> 它應該按照你想要的方式工作。

暫無
暫無

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

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