复杂的通用类声明

时间:2015-12-08 01:20:39

标签: java generics

这是演示问题的简单虚拟示例。

我们有以下课程:

   
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);
}

1 个答案:

答案 0 :(得分:1)

您需要将R声明为具有自己绑定的第二个类型参数,以便在声明R时可以引用T

public abstract class TestFactory<R extends Engine, T extends EnginesFactory<R>> {

(我假设您的意思是public abstract class,而不是public class abstract。)