web-dev-qa-db-fra.com

Comment connaissez-vous un type de variable en Java?

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?

124
Miguel Ribeiro
a.getClass().getName()
222
Martin

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

32
Martin Konecny

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
29
Copy_Paste

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();
}
23
Atspulgs

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 ...

}
4
epicwhat001

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.

3
Sebastien Lorber

Je pense que nous avons plusieurs solutions ici:

  • instance de pourrait être une solution.

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

  • System.out.println (((Object) f) .getClass (). GetName ());

ou

  • Integer.class.isInstance (1985); // donne vrai

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:

  1. FALSE
  2. VRAI

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

1
Karoly