Que signifie int.class

En java int, float, etc., sont des types primitifs. Les classes wrapper sont utilisées au cas où nous aurions besoin de les utiliser avec des génériques. Mais toujours la déclaration suivante fonctionne en java,

Class intClass=int.class 

Comment pouvons-nous appeler int.class même s’il s’agit d’un type primitif?

Une primitive devenant un object

Pour les primitives, des objects de classe sont disponibles en tant que constantes nommées TYPE dans les classes wrapper correspondantes. En d’autres termes, int.class est remplacé par java.lang.Integer.TYPE. Pour les autres types, le compilateur crée une variable membre privée dans la classe en cours de compilation pour contenir l’object Class et génère le code permettant d’initialiser ce membre à l’aide de Class.forName ().

Trouvé une discussion

Et une belle discussion ici et votre exemple également couvert dans ce lien.

Quelques mots à partir de là:

Comment une classe peut-elle être une primitive? Confondons un peu plus les choses. Nous pouvons accéder à l’object Class représentant une classe définie en codant, par exemple:

 Equation.class // returns the Equation Class object 

Mais on peut aussi dire:

 int.class 

obtenir un object de classe dont le nom est “int”. Notez que nous n’avons pas envoyé la méthode getClass () à un object. nous avons utilisé le mot réservé pour un type primitif intégré (int) et, en utilisant la notation par points, avons accédé à sa classe “field”. Et cela retourne un object de classe!

int.class est du même type que Class conformément aux spécifications.

De docs :

Les types Java primitifs (boolean, octet, char, short, int, long, float et double) et le mot clé void sont également représentés sous forme d’objects Class.

À partir de JLS 15.8.2 :

15.8.2. Littéraux de classe

Un littéral de classe est une expression constituée du nom d’une classe, d’une interface, d’un tableau ou d’ un type primitif , ou du pseudo-type void, suivi d’un ‘.’ et la classe de jeton.

Le type de classe C., où C est le nom d’une classe, d’une interface ou d’un type de tableau, est la Class .

Le type de p.class, où p est le nom d’un type primitif, est la Class , où B est le type d’une expression de type p après la conversion de boxe.

Le type de void.class est Class .

Il s’agit d’une erreur de compilation si le type nommé est une variable de type ou un type paramétré ou un tableau dont le type d’élément est une variable de type ou un type paramétré.

Il s’agit d’une erreur de compilation si le type nommé ne désigne pas un type accessible et de scope au point où apparaît le littéral de classe.

Un littéral de classe est évalué comme object Class pour le type nommé (ou pour void) tel que défini par le chargeur de classes qui définit la classe de l’instance actuelle.

Un littéral de classe est une expression constituée du nom d’une classe, d’une interface, d’un tableau ou d’un type primitif, ou du pseudo-type void, suivi d’un `. ‘ et la classe de jeton.

  1. Une énumération est une sorte de classe et une annotation est une sorte d’interface.
  2. Chaque tableau appartient également à une classe qui est reflétée en tant qu’object Classe partagé par 3. tous les tableaux ayant le même type d’élément et le même nombre de dimensions.
  3. Les types Java primitifs (booléen, octet, char, court, int, long, float et double), et
  4. Le mot clé void sont également

représentés sous forme d’objects de classe.

So System.out.println(int.class); va imprimer int alors System.out.println(Integer.class); affichera la class java.lang.Integer .