Для некоторых исторических причин, почему я должен использовать абстрактный класс с двумя подстановочных параметрами:Java Wildcard отливать подтип
AbstractColumn<M, I>
И у меня есть реализация (IDataSource является интерфейсом):
SimpleColumn<I> extends AbstractColumn<IDataSource<I>, I>
Проблема начинается, когда я должен применить параметр IDataSource<I>
к его реализации, например GenericDataSource<I>
:
SimpleColumn<I> column;
AbstractColumn<GenericDataSource<I>, <I>> newColumn =
(AbstractColumn<GenericDataSource<I>, <I>>)column;
Я получаю сообщение об ошибке:
Type mismatch: cannot convert from AbstractColumn<GenericDataSource<I>,I> to AbstractColumn<IDataSource<I>,I>
И если я пытаюсь преобразовать IDataSource
объект (не параметр) в GenericDataSource
, нет никаких ошибок:
IDataSource<T> ds;
GenericDataSource<T> gds = (GenericDataSource<T>)ds;
Почему java способен преобразовывать IDataSource
в GenericDataSource
, но не может сделать то же самое в шаблоне?
Проблема заключается в том, что в то время как '' GenericDataSource является подклассом '' IDataSource , и, следовательно, может быть отлит, 'AbstractColumn , >' не является подкласс или суперкласс '' SimpleColumn . –
Также подстановочный знак является '?', Вы, кажется, говорите об общих параметрах. –
кажется, что из этого вы не сможете получить информацию. У Pheraps есть лучшие способы сделать это. Можете ли вы опубликовать полный код SimpleColumn и AbstactColumn? – Onheiron