【发布时间】:2015-02-02 05:37:35
【问题描述】:
我有一个带有通用通配符 T 的抽象类 A<T>。A 有两个扩展,
public class A1 extends A<Integer> {...}
和
public class A2 extends A<String> {...}
现在我有了另一个类,我们称它为 B,它基本上是 A1 或 A2 的集合。所以我把它定义为一个泛型类型的类 T extends A:
public class B<T extends A> {...}
我希望能够在 B 中创建返回 T 的泛型类型的方法。例如,
B<A1> foo = new B<A1>;
foo.get(); // returns Integer, corresponding to A1's generic type
和
B<A2> bar = new B<A2>;
bar.get(); // returns String, corresponding to A2's generic type
在 Java 中可以做到这一点吗?在声明 B 的方法时,我无法弄清楚要放置什么返回类型(如果我想让 B 返回 T,我会输入 public T get() {...},但我实际上想返回参数化类型 of T)。或者有没有一种模式比我解决这个问题的方式更好地解决了这个问题?
谢谢。
【问题讨论】:
-
T是T的泛型类型,B(如已发布)对于foo和bar是Raw Type(这是另一种说法不是通用的)。
标签: java generics inheritance polymorphism wildcard