这是演示问题的简单虚拟示例。
我们有以下课程:
public abstract class Engine { }
public class DieselEngine extends Engine { }
public class PetrolEngine extends Engine { }
让我们创建一些生产引擎的工厂:
public abstract class EnginesFactory <T extends Engine> {
public List<T> produceEngines() {
return null;
}
}
public class DieselEnginesFactory extends EnginesFactory <DieselEngine> { }
public class PertolEnginesFactory extends EnginesFactory <PetrolEngine> { }
问题:
如何创建接受 EngineFactory 子类的泛型类? 下面的东西不起作用,但是创建它是为了表明我的需求:
public abstract class TestFactory <T extends EnginesFactory<R extends Engine>> { //R extends Engine is wrong
public void testFactory(T factory) {
testEngines(factory.produceEngines());
}
protected abstract void testEngines(List<R> engines);
}
答案 0 :(得分:1)
您需要将R
声明为具有自己绑定的第二个类型参数,以便在声明R
时可以引用T
。
public abstract class TestFactory<R extends Engine, T extends EnginesFactory<R>> {
(我假设您的意思是public abstract class
,而不是public class abstract
。)