web-dev-qa-db-fra.com

Comment déterminer le type primitif d'une variable primitive?

Existe-t-il une fonction de type "typeof" dans Java qui renvoie le type d'une variable de type de données primitives (PDT) ou une expression d'opérandes PDT?

instanceof semble fonctionner uniquement pour les types de classe.

40
ashley

Essayez ce qui suit:

int i = 20;
float f = 20.2f;
System.out.println(((Object)i).getClass().getName());
System.out.println(((Object)f).getClass().getName());

Il imprimera:

Java.lang.Integer
Java.lang.Float

Quant à instanceof, vous pouvez utiliser son homologue dynamique Class#isInstance :

Integer.class.isInstance(20);  // true
Integer.class.isInstance(20f); // false
Integer.class.isInstance("s"); // false
65
João Silva

Il existe un moyen simple qui ne nécessite pas la boxe implicite, donc vous ne serez pas confondu entre les primitives et leurs wrappers. Vous ne pouvez pas utiliser isInstance pour les types primitifs - par exemple appel de Integer.TYPE.isInstance(5) (Integer.TYPE est équivalent à int.class) renverra false comme 5 est placé automatiquement dans un Integer avant la main.

La façon la plus simple d'obtenir ce que vous voulez (remarque - c'est techniquement fait au moment de la compilation pour les primitives, mais cela nécessite toujours l'évaluation de l'argument) est par surcharge. Voir mon pâte idéone .

...

public static Class<Integer> typeof(final int expr) {
  return Integer.TYPE;
}

public static Class<Long> typeof(final long expr) {
  return Long.TYPE;
}

...

Cela peut être utilisé comme suit, par exemple:

System.out.println(typeof(500 * 3 - 2)); /* int */
System.out.println(typeof(50 % 3L)); /* long */

Cela dépend de la capacité du compilateur à déterminer le type de l'expression et à choisir la bonne surcharge.

18
oldrinb