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