我有三个类:抽象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
}
答案 0 :(得分:3)
根据您的B
和C
定义,您正在扩展类A
的原始形式,并创建每个类自己的T
泛型类型参数。类A
的原始意味着类型擦除发生在该类中的所有泛型上,并且必须进行转换。
您需要指定您的子类T
与超类T
相同:
class B<T> extends A<T> {
和
class C<T> extends A<T> {