java - Java 中的泛型 + 接口(interface)

标签 java generics

考虑这个例子:

class Parent<T> implements MyInterface<T> {...}
class Child1 extends Parent<ConcreteType1>{...}
class Child2 extends Parent<ConcreteType2>{...}

然后是以下工厂:

public class Factory<T> {
    public static <T> Parent<T> getChild(Type type) {
        switch (type) {
            case value1:
                return new Child1();
            case value2:
                return new Child2();
        }
    }
}

Type参数只是一个 enum .

现在,

  • 如果我保留上述内容,则会收到以下错误:无法转换 Child1Parent<T>
  • 如果我删除泛型,只留下 Parent而不是Parent<T> ,我收到警告

如何解决这个问题?

最佳答案

该方法并不真正知道 T 的确切类型,所以你可以返回 Parent<?> :

public static Parent<?> getChild(Type type) {
    ...
}

或者,您可以扩展 Type类来实际构造子级,这样您就可以控制确切的输出:

public static <T> Parent<T> getChild(Type<T> type) {
    return type.createChild();
}

关于java - Java 中的泛型 + 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35267006/

相关文章:

java - 如何避免在同一个 Java 项目中同时运行多个实例?

java - Spring 安全和身份验证提供程序

Java indexOf 和 lastIndexOf 返回 -1?请帮忙

java - 未绑定(bind)通配符和原始类型之间的区别

reactjs - 以类型作为参数的通用 TypeScript API

generics - 将 F# 泛型函数限制为联合类型?

java - SimpleJdbcCall 不能调用多个程序

java - 单击时更改 android 按钮颜色而不更改边框颜色?

c# - 从通用抽象类派生类和转换错误?

java - Spring:如何从实现通用接口(interface)的应用程序上下文中获取bean?