Почему следующий код дает ошибку компиляции?Java Generics - Невозможно преобразовать из <? extends MyObject> to <MyObject>
public MyObject(Builder<? extends MyObject> builder) {
// Type mismatch: cannot convert from MyObject.Builder<capture#5-of ? extends MyObject> to MyObject.Builder<MyObject>
Builder<MyObject> myObjBuilder = builder;
}
Если тип Builder подкласс MyObject, то почему не может назначать строитель просто ввести MyObject? Мне нужно сделать это, потому что я не могу использовать объект типа MyObject с построителем. Посмотрите на этот код, например:
public MyObject(Builder<? extends MyObject> builder) {
// The method getData(capture#8-of ? extends MyObject) in the type Builder<capture#8-of ? extends MyObject> is not applicable for the arguments (MyObject)
this.data = builder.getData(this);
}
Мне кажется, что это должно быть разрешено. Или я чего-то не хватает? Есть ли способ сделать это без литья строителя до (Builder<MyObject>)
и использования @SuppressWarnings?
Также обратите внимание, что мне нужно, чтобы Builder был <? extends MyObject>
, потому что MyObject и его Builder будут подклассы (как абстрактные).
Благодарим за помощь!
@AlexisKing, я не думаю, что этот вопрос совпадает с этим вопросом, но я думаю, что ему нужен тот же ответ, что и [Что такое риски явного литья из списка типов List extends MyObject> в список типов Список в Java?] (http://stackoverflow.com/questions/3403293/what-are-the-risks-of-explicitly-casting-from-a-list-of-type -list-extends-myob) –
См. также [Список Подкласс списка ? Почему не генерические генераторы Java неявно полиморфны?] (Http://stackoverflow.com/q/2745265/465378) –
Я предполагаю, что не использовал правильные ключевые слова для поиска. Я искал какое-то время. спасибо за ссылку – User12345