Есть 2 интерфейса:
Первый:
public interface ArgsConverter<D> {
public void prepare(...);
public D conv(...., Object[] args );
}
задача-получить массив аргументов и превратить его в объект.
Второй:
public interface Callback<D> {
MethType getMethodType();
Class<D> getDataObjectClass();
ArgsConverter<D> conv();
Object execute(D data);
}
Есть коллекция, которая состоит из
<Callback<? extends Object>>
то есть всевозможные колбеки в куче... Находим нужный колбек - проблем нет, вынимаем его
и получаем проблему type-safety. Хотя колбек и определяет тип данных, которые принимает на вход, а также, определяет конвертер, который нужно использовать - предупреждение type-safe все равно вылетает!
Callback<? extends Object> cb = CALLBACKS.stream....;
// convert ARRAY of arguments to DATA OBJECT
return cb.execute(cb.conv().conv( args));
Ошибка:
The method execute(capture#4-of ? extends Object) in the type Callback<capture#4-of ? extends Object> is not applicable for the arguments (capture#5-of ? extends Object)
Кто нить может подсказать - почему так происходит и как решить проблему БЕЗ костыля с
@SuppressWarnings("rawtypes")
Я так понимаю все дело в том, как хранится коллекция, а также в том, что wildcard коллекции не совпадает с тем, который указан на переменной (?)
Или в чем дело вообще
Подскажите)