Comment puis-je voir en Java si un objet est un tableau sans utiliser la réflexion? Et comment puis-je parcourir tous les éléments sans utiliser la réflexion?
J'utilise Google GWT donc je ne suis pas autorisé à utiliser la réflexion :(
J'aimerais implémenter les méthodes suivantes sans utiliser la refelection:
private boolean isArray(final Object obj) {
//??..
}
private String toString(final Object arrayObject) {
//??..
}
BTW: je ne veux pas non plus utiliser JavaScript pour pouvoir l'utiliser dans des environnements non GWT.
java
arrays
gwt
instanceof
edbras
la source
la source
obj.getClass().getComponentType()
.Vous pouvez utiliser
instanceof
.Opérateur de comparaison de types JLS 15.20.2
instanceof
Cela signifie que vous pouvez faire quelque chose comme ceci:
Il faudrait vérifier si l'objet est un
instanceof boolean[]
,byte[]
,short[]
,char[]
,int[]
,long[]
,float[]
,double[]
ouObject[]
, si vous voulez détecter tous les types de tableau.De plus, an
int[][]
est uninstanceof Object[]
, donc selon la façon dont vous souhaitez gérer les tableaux imbriqués, cela peut devenir compliqué.Pour le
toString
,java.util.Arrays
atoString(int[])
et d'autres surcharges que vous pouvez utiliser. Il a égalementdeepToString(Object[])
pour les tableaux imbriqués.Cela va être très répétitif (mais même
java.util.Arrays
très répétitif ), mais c'est comme ça en Java avec des tableaux.Voir également
la source
java.util.Arrays
ça, oui. Je vois que vous avez lu le code auquel j'ai lié.On peut accéder à chaque élément d'un tableau séparément en utilisant le code suivant:
Notez qu'il n'est pas nécessaire de savoir de quel type de tableau sous-jacent il s'agit, car cela fonctionnera pour n'importe quel tableau.
la source
isArray()
était déjà suffisamment couverte dans les réponses publiées 4 ans avant celle-ci.Il n'y a pas de relation de sous-typage entre les tableaux de type primitif, ou entre un tableau d'un type primitif et un tableau d'un type référence. Voir JLS 4.10.3 .
Par conséquent, ce qui suit est incorrect en tant que test pour voir s'il
obj
s'agit d'un tableau de n'importe quel type :Plus précisément, cela ne fonctionne pas s'il
obj
s'agit d'un tableau 1-D de primitives. (Cela fonctionne pour les tableaux primitifs avec des dimensions plus élevées, car tous les types de tableaux sont des sous-types deObject
. Mais c'est sans intérêt dans ce cas.)La meilleure solution (pour la
isArray
partie tableau de la question) dépend de ce qui compte comme "utiliser la réflexion".Dans GWT, l'appel
obj.getClass().isArray()
ne compte pas comme l'utilisation de la réflexion 1 , c'est donc la meilleure solution.Sinon, la meilleure façon de déterminer si un objet a un type de tableau est d'utiliser une séquence d'
instanceof
expressions.Vous pouvez également essayer de jouer avec le nom de la classe de l'objet comme suit, mais l'appel à
obj.getClass()
est à la limite de la réflexion.1 - Plus précisément, la
Class.isArray
méthode est répertoriée comme prise en charge par GWT dans cette page .la source
Vous pouvez créer une classe utilitaire pour vérifier si la classe représente une collection , une carte ou un tableau
la source
Simplement
obj instanceof Object[]
(testé sur JShell).la source