Bio: class.isInstance vs. instanceof

Beitrag lesen

Sup!

Das JavaDoc zu Class.isInstance sagt es eigentlich ganz schön - es ist die objektorientierte Variante von instanceof. Bedenke: instanceof muss der Entwickler in den Code schreiben. Wie stellst du aber zur Laufzeit fest, ob ein Objekt Instanz einer Klasse ist, wenn du vorher nicht weißt, auf welche Klasse du prüfen willst.
obj instanceof aFixedClass ist fest verdrahtet und setzt voraus, dass du zur Compilezeit aFixedClass kennst.
anUnknownClass.isInstance(obj) ist dynamisch und setzt nur voraus, dass du die Laufzeitklasse von anUnknownClass kennst.

Okay...

Aber ... öh ... was muss man für abgefahrene Dinge tun, damit man irgendwelche Objekte hat, von denen man nicht weiss, welchen Typ sie haben, und irgendwelche Klassen, von denen man auch nichts weiss, so dass man testen muss, ob irgendwelche Objekte Instanz irgendwelcher Klassen sind?

Und irgendwie habe ich das Gefühl, in meinem Use-Case würde instanceof reichen:

1. Ich habe Objekte, die alle Instanzen von Klassen sind, die das Interface "IEntity" implementieren (das sind ggf. ganz verschiedene Klassen).
2. Es gibt ein Interface "IValueSpecification", das "IEntity" (allerdings um drei Ecken) erweitert (IValueSpecification extends (...) extends IEntity)
3. Ich habe ein Objekt "o", von dem ich nur weiss, dass es das Interface "IEntity" implementiert (weil ich es von einer Methode bekomme, deren Rückgabewert IEntity ist) von dem ich testen will, ob es auch das Interface "IValueSpecification" implementiert.

Nun sagen die lokalen Java-Gurus, ich muss das mit

"IValueSpecification.class.instanceOf(o)" testen, weil es anders nicht gehen würde.

Und ich verstehe jetzt nicht, warum

"o instanceof IValueSpecification"

nicht gehen soll. Eclipse meckert beides nicht an...

Die Interfaces sind irgendwie nur Proxies mit public access für die wirklichen Objekte, die aus irgendeiner Datenbank kommen und verborgen sind und wo ein geheimnisvoller Persistenz-Layer drüberliegt, der mit Reflection funktioniert etc..

Vielleicht kannst Du Dir vorstellen, was die da machen. Ich nicht ;-)

Gruesse,

Bio