Плохо пытаться делать. Если вы не знаете, каким будет общий тип, как вы узнаете, если передача String
безопасна для типа?
Если вы действительно хотите это сделать, вы должны добавить соответствующую аннотацию к методу exec
, чтобы сообщить ей об устранении ошибки преобразования небезопасных / непроверенных типов. Но это просто превращение компиляции в потенциальный ClassCastException
во время выполнения, который может неожиданно вызвать какой-то подтип ExecContext
, который делает что-то другое в методе doSomething
.
РЕДАКТИРОВАТЬ Не думаю, что следующее также верно:
public static <T> void exec(ExecContext<T> ctx) {
String s = new String("saoj");
ctx.doSomething(s);
}
, поскольку компилятор не может сказать, что фактический тип, используемый для T
, будет String
или (гипотетическим) подтипом String
. Предположим, например, что exec
был вызван следующим образом:
ExecContext<Integer> ctx = ...;
exec(ctx);
Теперь, когда exec
вызывает метод doSomething
, он передает экземпляр String
в качестве аргумента, где общая сигнатура метода doSomething
говорит, что он должен передавать экземпляр E
; то есть Integer
.