Disons que je déclare une variable:
String a = "test";
Et je veux savoir de quel type il s’agit, c’est-à-dire que le résultat devrait être Java.lang.String
Comment procéder?
a.getClass().getName()
Si vous voulez le nom, utilisez la méthode de Martin. Si vous voulez savoir s'il s'agit d'une instance d'une certaine classe:
boolean b = a instanceof String
J'ai appris à partir du moteur de recherche (mon anglais est très mauvais, code donc ...) Comment obtenir le type de variable? UPS :
String str = "test";
String type = str.getClass().getName();
value: type = Java.lang.String
cette méthode :
str.getClass().getSimpleName();
value:String
maintenant exemple:
Object o = 1;
o.getClass().getSimpleName();
value:Integer
Je voudrais développer la réponse de Martin là-bas ...
Sa solution est plutôt agréable, mais elle peut être modifiée de sorte que tout "type de variable" puisse être imprimé comme ça (c'est en fait le type de valeur, plus sur le sujet ). Cela dit, "modifié" peut être une Parole forte pour cela. Peu importe, cela peut être utile.
Sa solution était:
a.getClass().getName()
Si vous voulez que cela fonctionne avec n'importe quoi, vous pouvez le faire:
((Object) myVar).getClass().getName()
//OR
((Object) myInt).getClass().getSimpleName()
Dans ce cas, la primitive sera simplement enveloppée dans un wrapper. Vous obtiendrez l'objet de la primitive dans ce cas.
Je l'ai moi-même utilisé comme ceci:
private static String nameOf(Object o) {
return o.getClass().getSimpleName();
}
Utilisation de génériques:
public static <T> String nameOf(T o) {
return o.getClass().getSimpleName();
}
Utiliser la fonctionnalité de surcharge de l'opérateur de Java
class Test {
void printType(String x) {
System.out.print("String");
}
void printType(int x) {
System.out.print("Int");
}
// same goes on with boolean,double,float,object ...
}
Je suis d'accord avec ce que Joachim Sauer a dit, impossible à connaître (le type de variable! Pas le type de valeur!) À moins que votre variable ne soit un attribut de classe (et que vous deviez récupérer des champs de classe, obtenir le bon champ par nom ...)
En fait, pour moi, il est totalement impossible qu’une méthode a.xxx().yyy()
vous donne la bonne réponse car la réponse serait différente pour le même objet, en fonction du contexte dans lequel vous appelez cette méthode ...
Comme le dit teehoo, si vous savez compiler une liste définie de types à tester, vous pouvez utiliser instanceof, mais vous obtiendrez également des sous-classes renvoyant true ...
Une solution possible serait également de s'inspirer de l'implémentation de Java.lang.reflect.Field
et de créer votre propre classe Field
, puis de déclarer toutes vos variables locales comme étant cette implémentation personnalisée Field
... mais vous. Mieux vaut trouver une autre solution, je me demande vraiment pourquoi vous avez besoin du type de variable, et pas seulement du type de valeur.
Je pense que nous avons plusieurs solutions ici:
Pourquoi? Dans Java, chaque classe est héritée de la classe Object elle-même. Donc, si vous avez une variable et que vous souhaitez connaître son type. Vous pouvez utiliser
ou
ou
isPrimitive ()
public static void main(String[] args) {
ClassDemo classOne = new ClassDemo();
Class classOneClass = classOne();
int i = 5;
Class iClass = int.class;
// checking for primitive type
boolean retval1 = classOneClass.isPrimitive();
System.out.println("classOneClass is primitive type? = " + retval1);
// checking for primitive type?
boolean retval2 = iClass.isPrimitive();
System.out.println("iClass is primitive type? = " + retval2);
}
Cela va nous donner:
En savoir plus ici: Comment déterminer le type primitif d'une variable primitive?
https://docs.Oracle.com/javase/tutorial/Java/nutsandbolts/datatypes.html
http://docs.Oracle.com/cd/E26806_01/wlp.1034/e14255/com/bea/p13n/expression/operator/Instanceof.html