如何使用方法super()传递有界参数

时间:2014-03-31 16:46:52

标签: java generics inheritance

我有三个类:抽象A和两个扩展A的B和C.

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和C的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
}

1 个答案:

答案 0 :(得分:3)

根据您的BC定义,您正在扩展类A的原始形式,并创建每个类自己的T泛型类型参数。类A的原始意味着类型擦除发生在该类中的所有泛型上,并且必须进行转换。

您需要指定您的子类T与超类T相同:

class B<T> extends A<T> {

class C<T> extends A<T> {