Java 具有通用接口实现的工厂继承

Java factory inheritance with generic interface implementation

我想要一个继承另一个工厂的工厂,两个工厂都实现相同的通用接口,但类型不同,相互继承:

class FactoryA implements FactoryI<A> {
    // common code
    ...
    A get() {
        return new A();
    }
}

class FactoryB extends FactoryA implements FactoryI<B> {
    B get() {
        return new B();
    }
}

class B extends A {
}

FactoryI<T> {
    T get()
}

但这给了我以下编译错误:

'FactoryI' cannot be inherited with different type arguments: 'A' and 'B'

我的第一个版本没有从 FactoryA 继承 FactoryB,但它工作正常。 但事实证明,现在我想重用两个工厂之间的公共代码。

实现此目标的最佳方法是什么?

您还需要使 FactoryA 通用。这样一个子类可以 return A

的不同子类
class FactoryA<T extends A> implements FactoryI<T> {
    // common code
    public T get() {
        return (T) new A();
    }
}

class FactoryB extends FactoryA<B> {
    public B get() {
        return new B();
    }
}

class A {

}

class B extends A {
}

interface FactoryI<T> {
    T get();
}