[英]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.