2016-04-14 20 views
2

Betrachten wir die Klassen MinorClassA und MinorClassB, beide MajorClass erstrecken. Ich habe ein Objekt von MajorClass, dass ich sicher bin, ist tatsächlich eine Instanz einer seiner Unterklassen.überprüfen Unterklasse eines Objekts in Java

MinorClassA subclassedObj = new MinorClassA(); 
MajorClass obj = subclassedObj; 

//------ More code ------------- 

if(subclassof(obj) == MinorClassA) //Something like this 

Wie kann ich herausfinden, was die Unterklasse dieses Objekts ist? Ich habe keinen Zugriff auf subclassedObj, nur auf obj.

Zur Klarstellung bearbeiten: Ich weiß, wie man überprüft, ob MinorClassA Instanz von MajorClass ist, aber nicht umgekehrt.

+2

'if (obj instanceof classname) ...' – khelwood

+1

* Wie kann ich herausfinden, was die Unterklasse des Objekts ist? * Programmieren Sie die Schnittstelle, warum versuchen Sie, den konkreten Typ zu bestimmen? –

+2

@ElliottFrisch: "Programm an die Schnittstelle" sollte als eine gute allgemeine Regel betrachtet werden, nicht Dogma in jeder Situation zu folgen. Es kann berechtigte Gründe geben, den Ausführungszeittyp eines Objekts zu überprüfen. –

Antwort

4

Klingt wie Sie die instanceof operator:

Zur Laufzeit wollen, ist das Ergebnis des instanceof Operator ist wahr, wenn der Wert des RelationalExpression nicht null ist und der Verweis auf die Reference gegossen werden konnte ohne eine ClassCastException zu erhöhen. Ansonsten ist das Ergebnis falsch.

So in Ihrem Fall:

if (obj instanceof MinorClassA) { 
    ... 
} 
+0

Instanz von tut sowohl die Kompilierzeit als auch die Laufzeitprüfung, um die Eltern- und Kindklassenbeziehungsanalyse durchzuführen. http://bytepadding.com/java/java-instanceof/ – KrazyGautam

+0

@KrazyGautam: Ja, aber die Überprüfung der Kompilierzeit ist in dieser Frage nicht relevant. –

2

Verwenden Instanceof zu überprüfen, ob obj eine Instanz der Klasse ist:

if (obj instanceof MinorClassA) { 
    System.out.println("obj is an instance of MinorClassA"); 
} else if (obj instanceof MinorClassB) { 
    System.out.println("obj is an instance of MinorClassB"); 
}