Ich möchte überprüfen, ob ein Objekt o
eine Instanz der Klasse C
oder einer Unterklasse von ist C
.
Zum Beispiel, wenn ich p
von Klasse Point
bin, möchte ich x.instanceOf(Point.class)
sein true
und auch x.instanceOf(Object.class)
sein true
.
Ich möchte, dass es auch für primitive Box-Typen funktioniert. Zum Beispiel, wenn x
ist ein Integer
dann x.instanceOf(Integer.class)
sollte sein true
.
Gibt es so etwas? Wenn nicht, wie kann ich eine solche Methode implementieren?
java
reflection
instanceof
Snakile
quelle
quelle
Antworten:
Class.isInstance macht was Sie wollen.
Natürlich sollten Sie es nicht verwenden, wenn Sie es
instanceof
stattdessen verwenden könnten , aber für Reflexionsszenarien ist es oft nützlich.quelle
if (a instanceof Point)
-, aber Sie es auf eine kompliziertere Art und Weise tun, muss jeder, der den Code liest, denken: "Oh, es muss einen Grund dafür geben, dass dies auf die harte Tour gemacht wird." Wechseln Sie dann zu den Dokumenten, um herauszufinden, wie sich dieseClass.isInstance
unterscheideninstanceof
. Sie verschwenden die Zeit Ihrer Kollegen.Ähm ... Was? Was sind o, p und x?
Nein, es sollte nicht einmal kompiliert werden. Grundelemente sind keine Objekte, und Sie können keine Methoden für sie aufrufen.
Wie auch immer, es gibt drei Dinge, von denen eines definitiv das erreichen kann, was Sie wollen (sie unterscheiden sich etwas darin, wo genau die zutreffen:
instanceof
Operator, wenn Sie die Klasse zur Kompilierungszeit kennen.quelle
Sie müssen nur die richtige Syntax verwenden
Für primitive Typen muss man das ganz anders machen. Da Sie keine Methoden für sie erstellen können, benötigen Sie eine Klasse, die die Methode beibehält. Anstelle von "x.instanceOf (Integer.Class)" müssen Sie also "MyClassComparer.instanceOf (x, Integer.Class)" oder ähnliches aufrufen. Dies könnte leicht durch Überladen von Methoden implementiert werden, aber ich sehe keinen Fall, in dem diese Funktionalität überhaupt wünschenswert wäre.
quelle
Tatsächlich gibt es in Java einen booleschen Operator namens instanceof, mit dem bestimmt werden kann, ob ein Objekt eine Instanz einer Klasse, eine Instanz einer Unterklasse oder eine Instanz einer Klasse ist, die eine bestimmte Schnittstelle implementiert.
Das Java-Tutorial enthält ein gutes Beispiel für diesen Operator
quelle
Du kannst tun:
quelle
"Ich möchte, dass es auch für primitive Typen funktioniert. Wenn beispielsweise x eine Ganzzahl ist, sollten x.instanceOf (Integer.class) und auch x.instanceOf (Object.class) wahr sein."
Warum? Primitive Typen und Referenztypen sind völlig getrennt. Ein primitives int ist kein Subtyp von Integer oder Object. Der Typ eines primitiven Werts ist zur Kompilierungszeit immer statisch bekannt, daher macht es keinen Sinn, seinen Typ zu testen. Natürlich können Sie einen primitiven Wert einschließen und dann seinen Typ testen:
Aber worum geht es?
quelle
Ich denke, Sie sind verwirrt über die Instanz von rohen und generischen Objekten
quelle
instanceof
.