generics - Java Wildcard cast to subtype -


for historical reasons must use abstract class 2 wildcard parameters:

abstractcolumn<m, i> 

and have implementation(idatasource interface):

simplecolumn<i> extends abstractcolumn<idatasource<i>, i> 

the problem starts when should cast idatasource<i> parameter it's implementation, e.g. genericdatasource<i>:

simplecolumn<i> column; abstractcolumn<genericdatasource<i>, <i>> newcolumn =          (abstractcolumn<genericdatasource<i>, <i>>)column; 

i'm getting error:

type mismatch: cannot convert abstractcolumn<genericdatasource<i>,i> abstractcolumn<idatasource<i>,i> 

and if i'm trying convert idatasource object(not parameter) genericdatasource, there no errors:

idatasource<t> ds; genericdatasource<t> gds = (genericdatasource<t>)ds; 

why java able convert idatasource genericdatasource, can't same in wildcard?

generics tricky @ best of times. start, here 2 bits of code. first (your code) not compile. second compile. difference in type parameter abstractcolumn.

    simplecolumn<i> column = null;      abstractcolumn<genericdatasource<i>, i> newcolumn1;     newcolumn1 = (abstractcolumn<genericdatasource<i>, i>)column;      abstractcolumn<idatasource<i>, i> newcolumn2;     newcolumn2 = (abstractcolumn<idatasource<i>, i>)column; 

normally i'd solve problem putting "? extends i" or "? super i" in 1 of type parameters. however, in case not working. note second type parameter abstractcolumn doesn't matter - removing not resolve problem either.

    simplecolumn<i> column = null;      abstractcolumn<genericdatasource<i>> newcolumn1;     newcolumn1 = (abstractcolumn<genericdatasource<i>>)column;      abstractcolumn<idatasource<i>> newcolumn2;     newcolumn2 = (abstractcolumn<idatasource<i>>)column; 

i think problem you're hitting related compile-time type erasure. basically, when program compiled type parameters converted "object". compiler has realised in particular case, unable perform correct cast (and raise classcastexception) blocking doing this. need java generics guru this!


Comments

Popular posts from this blog

amazon web services - S3 Pre-signed POST validate file type? -

c# - Check Keyboard Input Winforms -