For some historical reasons I must use an abstract class with a two wildcard parameters:
AbstractColumn<M, I>
And I have my implementation(IDataSource is an interface):
SimpleColumn<I> extends AbstractColumn<IDataSource<I>, I>
The problem starts when I should cast IDataSource<I>
parameter to it's implementation, e.g. GenericDataSource<I>
:
SimpleColumn<I> column;
AbstractColumn<GenericDataSource<I>, <I>> newColumn =
(AbstractColumn<GenericDataSource<I>, <I>>)column;
I'm getting an error:
Type mismatch: cannot convert from AbstractColumn<GenericDataSource<I>,I> to AbstractColumn<IDataSource<I>,I>
And if I'm trying to convert IDataSource
object(not parameter) to GenericDataSource
, there is no errors:
IDataSource<T> ds;
GenericDataSource<T> gds = (GenericDataSource<T>)ds;
Why java is able to convert IDataSource
to GenericDataSource
, but can't do the same in a wildcard?