java - problems invoking a method with a generic type argument -


i have problem generics, let me explain.

i have class wraps linkedlist:

public class idnlist<t extends numerable> extends idnelement implements list<t> {      private linkedlist<t> linkedlist;      @override     public boolean add(t e){        return linkedlist.add(e);     }     //stuff   } 

please note generic type t of class extends numerable interface.

ok, inside different class want invoke method follows:

 if(childtoadd instanceof numerable)  ((idnlist<?>)this).add((numerable)childtoadd); 

but eclipse says: the method add(capture#1-of ?) in type idnlist<capture#1-of ?> not applicable arguments (numerable), , can't figure out why can't work. why can't add numerable object list? missing?

edit: it's classic. ask, , find clue. seems workaround is:

  ((idnlist<numerable>)this).add((numerable)childtoadd); 

but don't know how elegant is. appreciate further comments.

say have classes a , b both extend numerable. there 3 valid types of idnlist: idnlist<a>, idnlist<b>, , idnlist<numerable>.

i hope agree shouldn't able add numerable idnlist<a>.

now, in line of code, how compiler know whether you've matched types correctly?

(idnlist<?>)this).add((numerable)childtoadd); 

all knows childtoadd numerable, , this kind of idnlist. doesn't know kind, can't guarantee type safety. remember generic type checking done entirely @ compile time, not runtime.

i see how workaround allows code compile, i'm not sure risks of are. seems me since generic type parameters erased @ runtime, you're bypassing type checking here.


Comments

Popular posts from this blog

delphi - How to convert bitmaps to video? -

jasper reports - Fixed header in Excel using JasperReports -

python - ('The SQL contains 0 parameter markers, but 50 parameters were supplied', 'HY000') or TypeError: 'tuple' object is not callable -