Jag försöker komma runt ett problem jag har suttit med ett tag, och inte fått till en riktigt fin lösning på. Jag skapar ett objekt dynamiskt på ett ställe, lägger in i en ArrayList och vill sedan kunna kontrollera dess ursprung samt superklasser på ett annat ställe. Operatorn instanceof trodde jag skulle lösa mina problem, men icke...
Object object = enArrayList.get( index );
if( object instanceof Class.forName( "ett.paket.och.EnKlass" ) ) {
System.out.println( "Instans av ett.paket.och.EnKlass." );
}
Det här fungerar ju inte riktigt som jag vill, man kan inte använda Class.forName() där.
Visst kan jag annars göra ett fulhack som endast kollar gentemot en konkret klass och inte mot superklasser eller implementationer, men det vill jag helst undvika:
:r Självklart! Bara jag som är så dum, har faktiskt aldrig använt instanceof på det sättet förut men när jag tänker 1 sekund längre så är det ju exakt så man gör i vanliga fall, dvs när man testar med inbyggda java klasser :OO
Ser ganska mörkt ut tycker jag, hittade även denna text på javas hemsida och det bekräftar väll bara det som du har märkt, att det inte går att skriva något annat än en typ som op2,
op1 must be the name of an object and op2 must be the name of a class. An object is considered to be an instance of a class if that object directly or indirectly descends from that class.
Personligen tycker jag att det är taskig modellering om du inte ens vet vilket interface eller basklass en dynamiskt laddad implementation stödjer. Hur ska du då veta vad du kan göra med klassen.
"Jo, jag har fått in en klass av typen Gummilurka och jo, jag har kollat, det är en Gummilurka..."