186 votes

Comment connaître le type d'une variable en Java ?

Supposons que je déclare une variable :

String a = "test";

Et je veux savoir de quel type il s'agit, c'est-à-dire que la sortie doit être java.lang.String Comment faire ?

2 votes

Êtes-vous vraiment intéressé par la type de la variable ? Ou bien vous intéressez-vous à la type de la valeur ? Parce que le type de la variable ne peut pas être obtenu facilement (en fait, ce n'est pas possible du tout pour les variables locales et nécessite une réflexion pour les champs).

0 votes

@Joachim, quelle est la différence entre "type de la variable" et "type de la valeur" ?

9 votes

@Paul : Considérer Object o = "o"; - le type de la variable est Object, le type de la valeur est String.

4voto

Karoly Points 374

Je pense que nous avons plusieurs solutions :

  • instance de pourrait être une solution.

Pourquoi ? En Java, chaque classe est héritée de la classe Object elle-même. Ainsi, 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 true

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. FAUX
  2. VRAI

Pour en savoir plus, cliquez 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

3voto

Sebastien Lorber Points 9682

Je suis d'accord avec Joachim Sauer, il n'est pas possible de savoir (le type de variable ! pas le type de valeur !) à moins que votre variable ne soit un attribut de classe (et vous devriez récupérer les champs de classe, obtenir le bon champ par nom...).

En fait, pour moi, il est tout à fait impossible qu'une quelconque a.xxx().yyy() vous donne la bonne réponse puisque la réponse serait différente sur le même objet, selon le contexte dans lequel vous appelez cette méthode...

Comme l'a dit teehoo, si vous connaissez à la compilation une liste définie de types à tester, vous pouvez utiliser instanceof mais vous obtiendrez aussi des sous-classes renvoyant true...

Une solution possible consisterait également à s'inspirer de la mise en œuvre de java.lang.reflect.Field et créez votre propre Field et déclarez ensuite toutes vos variables locales sous la forme de cette classe personnalisée Field mais vous devriez trouver une autre solution, je me demande vraiment pourquoi vous avez besoin du type de variable, et pas seulement du type de valeur ?

0 votes

Pour "mais vous obtiendrez également des sous-classes retournant true..." Je pense que vous vouliez dire "mais vous obtiendrez également des classes parentales retournant true..." n'est-ce pas ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X