Это простой пример для демонстрации проблемы.Сложная общая декларация класса
У нас есть следующие классы:
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);
}
Спасибо! Это правильный ответ :) Я также редактировал вопрос, чтобы исправить найденную ошибку. – Hubert