java - 如何使用该类的泛型类型(Java)的泛型类型?

标签 java generics inheritance polymorphism wildcard

我有一个抽象类A<T>带有通用通配符 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() {...} ,但实际上我想返回参数化类型 T)。或者是否有一种模式可以比我处理问题的方式更好地解决这个问题?

谢谢。

最佳答案

您可以为 B 声明第二个类型参数,并将其作为 A 的参数化

class B<K, T extends A<K>> {
    public K get() {
        // actual implementation
        return null;
    }
}

然后声明你的变量

B<String, A2> var = new B<>();
String ret = var.get();
<小时/>

What is a raw type and why shouldn't we use it?

关于java - 如何使用该类的泛型类型(Java)的泛型类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28271691/

相关文章:

java - 进行 JNI 调用时出现 Unsatisfied Link 错误

c# - 将 'Type' 传递给通用构造函数

java - 如何生成类型List<? super 数>?

java - 在这种情况下继承和多态性如何工作?

Swift:初始化程序不会覆盖其父类(super class)中的指定初始化程序

c# - 后代非泛型类到基泛型类

java servlet 使用 cookie 记住我的选项

java - 使用 @RunWith(PowerMockRunner.class) 时如何解决 java 单元测试中的链接错误

java - spring boot注释 Autowiring 的问题

c# - 我可以在 C# 中创建求和的通用方法吗