Wie kann ich in Java sehen, ob ein Objekt ein Array ist, ohne Reflektion zu verwenden? Und wie kann ich alle Elemente ohne Reflexion durchlaufen?
Ich verwende Google GWT, daher darf ich keine Reflektion verwenden :(
Ich würde gerne die folgenden Methoden implementieren, ohne die Neuauswahl zu verwenden:
private boolean isArray(final Object obj) {
//??..
}
private String toString(final Object arrayObject) {
//??..
}
Übrigens: Ich möchte JavaScript auch nicht so verwenden, dass ich es in Nicht-GWT-Umgebungen verwenden kann.
java
arrays
gwt
instanceof
edbras
quelle
quelle
obj.getClass().getComponentType()
.Sie können verwenden
instanceof
.JLS 15.20.2 Typvergleichsoperator
instanceof
Das heißt, Sie können so etwas tun:
Sie müßten überprüfen , ob das Objekt ein
instanceof boolean[]
,byte[]
,short[]
,char[]
,int[]
,long[]
,float[]
,double[]
, oderObject[]
, wenn Sie alle Array - Typen erkannt werden sollen.Außerdem
int[][]
ist an eininstanceof Object[]
. Je nachdem, wie Sie mit verschachtelten Arrays umgehen möchten, kann dies kompliziert werden.Für die
toString
,java.util.Arrays
hat einetoString(int[])
und andere Überlastungen Sie verwenden können. Es hat auchdeepToString(Object[])
für verschachtelte Arrays.Es wird sich sehr wiederholen (aber es wird sich auch
java.util.Arrays
sehr wiederholen ), aber so ist es in Java mit Arrays.Siehe auch
quelle
java.util.Arrays
geht das ja. Ich sehe, dass Sie den Code gelesen haben, mit dem ich verlinkt habe.Mit dem folgenden Code kann auf jedes Element eines Arrays separat zugegriffen werden:
Beachten Sie, dass Sie nicht wissen müssen, um welche Art von zugrunde liegendem Array es sich handelt, da dies für jedes Array funktioniert.
quelle
isArray()
wurde bereits 4 Jahre zuvor angemessen in den Antworten behandelt.Es gibt keine Subtypisierungsbeziehung zwischen Arrays vom primitiven Typ oder zwischen einem Array eines primitiven Typs und einem Array eines Referenztyps. Siehe JLS 4.10.3 .
Daher ist Folgendes als Test falsch, um festzustellen, ob
obj
es sich um ein Array jeglicher Art handelt :Insbesondere funktioniert es nicht, wenn
obj
es sich um ein 1-D-Array von Grundelementen handelt. (Es funktioniert jedoch für primitive Arrays mit höheren Dimensionen, da alle Array-Typen Untertypen von sindObject
. In diesem Fall ist dies jedoch umstritten.)Die beste Lösung (für den
isArray
Array-Teil der Frage) hängt davon ab, was als "Verwenden von Reflexion" gilt.In GWT zählt das Aufrufen
obj.getClass().isArray()
nicht als Verwendung von Reflection 1 , daher ist dies die beste Lösung.Andernfalls können Sie am besten herausfinden, ob ein Objekt einen Array-Typ hat,
instanceof
indem Sie eine Folge von Ausdrücken verwenden.Sie können auch versuchen, mit dem Namen der Objektklasse wie folgt herumzuspielen, aber der Aufruf von
obj.getClass()
grenzt an Reflexion.1 - Genauer gesagt wird die
Class.isArray
Methode auf dieser Seite als von GWT unterstützt aufgeführt .quelle
Sie können eine Dienstprogrammklasse erstellen, um zu überprüfen, ob die Klasse eine Sammlung , eine Zuordnung oder ein Array darstellt
quelle
Einfach
obj instanceof Object[]
(auf JShell getestet).quelle