2014-03-31 86 views
1

我有三個類來傳送有界參數:抽象A和兩個B和C,其延伸的A.如何使用方法超級()

class A<T> { 

    ArrayList<T> someField; 

    A() { 
     someField = new ArrayList<T>(); 
    } 

    ArrayList<T> getSomeField() { return someField; } 
} 

現在我有B和C

class B<T> extends A { 

    B() { 
     super(); 
    } 
} 

class C<T> extends A{ 

    C() { 
     super(); 
    } 
} 

當我嘗試使用B和CI的不同類型的getSomeField時,必須指定它是哪種類型。我的問題是如何將T參數從B類傳遞到A,以避免例如爲每個循環指定ArrayList的類型。如果有可能的話。

例子:

祝:

B obj = new B<T>(); 
for (T item: B.getSomeField) { 
    do something 
} 

我必須:

B obj = new B<T>(); 
for (T item: (ArrayList<T>)B.getSomefield) { 
    do something 
} 
+2

我沒有看到'B'和'C'從'A延伸','A'類都不抽象。 –

+0

您的意思是'B類延伸A '?否則,你正在擴展原始類型。如果你展示一個簡短的*完整的*程序來證明問題,那真的很有幫助。 –

回答

3

有了您的BC定義,要擴展A類的原始形式,創造每個類自己的T泛型類型參數。類A的原始意味着類型擦除發生在該類中的所有泛型上,並且鑄造變得必要。

你需要指定你的子類的T是一樣的超類的T

class B<T> extends A<T> { 

class C<T> extends A<T> {