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.

346voto

Martin Points 13951
a.getClass().getName()

22 votes

Cela donnera le type de la valeur, mais pas nécessairement le type de la variable.

7 votes

Je me suis dit que c'était ce que l'OP recherchait vraiment puisque la déclaration de a est assez évident au moment de la compilation

5 votes

Cela fonctionnerait si les types n'étaient pas des primitives... Si le type est int, comment connaître le type ?

52voto

Atspulgs Points 15

En complément de la réponse de Martin...

Solution Martins

a.getClass().getName()

Solution élargie

Si vous voulez qu'il fonctionne avec n'importe quoi, vous pouvez le faire :

((Object) myVar).getClass().getName()
//OR
((Object) myInt).getClass().getSimpleName()

S'il s'agit d'un type primitif, il sera enveloppé (Autoboxed) dans une variante d'objet correspondante.

Exemple n° 1 (ordinaire)

private static String nameOf(Object o) {
    return o.getClass().getSimpleName();
}

Exemple n° 2 (produits génériques)

public static <T> String nameOf(T o) {
    return o.getClass().getSimpleName();
}

Apprentissage supplémentaire

0 votes

Intéressant. Je viens d'essayer votre code sur : System.out.println( ( (Object) Integer.parseInt("12") ).getClass().getSimpleName() ) ; et ça marche ! \o /

0 votes

Merci beaucoup, avant que la getSimpleName() J'ai essayé d'utiliser (Stack)(variable.getClass().toString().split(".")).pop() et cela n'a pas fonctionné, j'ai utilisé la logique JavaScript et je l'ai converti en pile pour sortir le dernier élément après avoir divisé avec . et cela n'a pas fonctionné.

43voto

Martin Konecny Points 7328

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

36 votes

N'êtes-vous pas Martin vous aussi ? :)

2 votes

L'autre Martin ... LOL ;)

1 votes

Code Thic Double a = 1d; boolean b = a instanceof String; provoquera une erreur error: incompatible types: Double cannot be converted to String

32voto

Copy_Paste Points 41

J'ai appris du moteur de recherche (mon anglais est très mauvais, donc code...) Comment obtenir le type d'une variable ? Up's :

String str = "test";
String type = str.getClass().getName();
value: type = java.lang.String

cette méthode :

str.getClass().getSimpleName();
value:String

exemple maintenant :

Object o = 1;
o.getClass().getSimpleName();
value:Integer

4voto

epicwhat001 Points 49

Utiliser la fonction de surcharge des opérateurs 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 ...

}

12 votes

Java n'a pas de concept de surcharge d'opérateur, il s'agit d'une surcharge de méthode.

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