Итак, у вас есть
Processor<?> processor = ...;
Request request = ...;
processor.process(request);
, но process
объявлен как
public void process(T request);
Request
, и нельзя гарантировать, что он является подтипом T
, поэтому он не будет компилироваться.
Вам нужно изменить Request
на правильный тип.
Прежде всего вам нужно вернуть правильный тип класса.
public Class<?> getRequestType();
становится
public Class<T> getRequestType();
( Редактировать: Теперь это было изменено в исходном вопросе.)
Затем нам нужно прочитать объект запроса правильного типа. Для любого конкретного объекта ?
здесь будет ссылаться на определенный тип. И мы можем уловить это, введя новый метод.
public static void main(String[] args) {
doProcess(processors.get("proc name"));
}
private static <T> void doProcess(Processor<T> processor) {
T request = objectMapper.readValue(json, processor.getRequestType());
processor.process(request);
}