Я использую общий абстрактный класс фреймворка AbstractProcessor<T extends CtElement>
, который в основном является посетителем, который посещает все элементы T. Существует метод
public void process(T element)
, который действует на все элементы указанного типа ичто-то делает.
Затем я сам реализовал другой абстрактный класс, который добавляет пару функций к этому классу фреймворка GenerationProcessor<T extends CtElement> extends AbstractProcessor<T>
.
Затем существуют конкретные реализации классов GenerationProcessor
, которыеЯ создаю с помощью своего рода фабричного шаблона, удерживая список типа GenerationProcessor
, чтобы затем вызвать process
-метод с помощью полиморфизма.Одним из них может быть XYZProcessor<T extends CtElement> extends GenerationProcessor<T>
.Когда я сейчас создаю эти конкретные процессоры и пытаюсь дать им конкретный тип (который, конечно, расширяет CtElement), чтобы шаблон посетителя посещал такие элементы, как этот new XYZProcessor<CtNamedElement>()
, где CtNamedElement
является подтипом CtElement
, я делаюне получить ожидаемый результат.Метод process
, кажется, вызывается для всех посещаемых элементов типа CtElement
, а НЕ только для элементов типа CtNamedElement
, как я хочу (поскольку вызов конструктора для XYZProcessor с параметром типа CtNamedElement).
Кто-нибудь знает, что здесь происходит?