Duplicata possible:
Comment déterminer la classe d'un objet (en Java)?
Java détermine de quelle classe est un objet
J'ai un exemple de méthode incomplète pour comparer le type d'objet d'un objet donné
public void test(Object value) {
if (value.getClass() == Integer) {
System.out.println("This is an Integer");
}else if(value.getClass() == String){
System.out.println("This is a String");
}else if(value.getClass() == Float){
System.out.println("This is a Float");
}
}
La méthode peut être appelée comme:
test("Test");
test(12);
test(10.5f);
cette méthode ne fonctionne pas réellement, veuillez m'aider à la faire fonctionner
Vous avez oublié le .class
:
if (value.getClass() == Integer.class) {
System.out.println("This is an Integer");
}
else if (value.getClass() == String.class) {
System.out.println("This is a String");
}
else if (value.getClass() == Float.class) {
System.out.println("This is a Float");
}
Notez que ce type de code est généralement le signe d'une mauvaise conception OO.
Notez également que comparer la classe d'un objet avec une classe et utiliser instanceof n'est pas la même chose. Par exemple:
"foo".getClass() == Object.class
est faux, alors que
"foo" instanceof Object
est vrai.
L'utilisation de l'un ou de l'autre dépend de vos besoins.
Vous pouvez comparer les jetons de classe les uns aux autres, vous pouvez donc utiliser value.getClass() == Integer.class
. Cependant, la manière la plus simple et la plus canonique est d'utiliser instanceof
:
if (value instanceof Integer) {
System.out.println("This is an Integer");
} else if(value instanceof String) {
System.out.println("This is a String");
} else if(value instanceof Float) {
System.out.println("This is a Float");
}
Remarques:
instanceof C
correspond également aux sous-classes de C
. Cependant, dans ce cas, toutes les classes répertoriées sont final
, elles n'ont donc pas de sous-classes. Ainsi, instanceof
est probablement bien ici.comme l'a déclaré JB Nizet, ces vérifications ne sont pas OO design. Vous pouvez peut-être résoudre ce problème de manière plus OO, par exemple.
System.out.println("This is a(n) " + value.getClass().getSimpleName());
Vous voulez instanceof
:
if (value instanceof Integer)
Cela sera vrai même pour les sous-classes, ce qui est généralement ce que vous voulez, et c'est également null-safe. Si vous avez vraiment besoin de la même classe, vous pouvez le faire
if (value.getClass() == Integer.class)
ou
if (Integer.class.equals(value.getClass())
Utilisation value instanceof YourClass