2013-09-25 3 views
4

Quand nous disonsComment utiliser .class sur les types primitifs?

Class c = Integer.class; 
    System.out.println(c); 

il imprime

class java.lang.Integer 

ce qui est logique car java.lang.Integer est une classe. Nous pouvons donc avoir un objet Class correspondant.

Mais quand je fais

Class c1 = int.class; 
    System.out.println(c1); 

il imprimer int que je me sentais est une sorte de ambiguë .class renvoie un objet de type Class et int n'est pas une classe (mais un type primitif).

Quel est le motif derrière l'autorisation de l'opération .class sur les types primitifs lorsqu'une telle classe (primitiveType.class.getName()) n'existe pas?

Aussi, si vous voyez toString() Méthode de classe de classe

public String toString() { 
    return (isInterface() ? "interface " : (isPrimitive() ? "" : "class ")) 
     + getName(); 
} 

types primitifs Comme ne sont pas des classes ou des interfaces, il suffit d'imprimer le nom (int pour int). Alors pourquoi autoriser la création d'objet Class d'une classe qui n'est pas présente?

+0

Je pense que c'est l'un des java dans les anti. –

Répondre

3

Il est documenté dans the javadoc:

Les types Java primitifs (boolean, byte, char, short, int, long, float et double), et le vide de mot-clé sont également représentés comme des objets de classe.

Ceci est particulièrement utile lorsque vous voulez appeler une méthode qui attend des arguments primitifs par réflexion.

Imaginez une méthode:

class MyClass { 
    void m(int i) {} 
} 

Vous pouvez y accéder avec:

MyClass.class.getDeclaredMethod("m", int.class); 
0

La primitive n'est pas une classe. Ce sont des types réservés en Java.

Quand vous dites entier, il est une classe dans le paquet java.lang tels que:

classe Integer { ............ }

donc pour toute catégorie vous pouvez utiliser .class, Non applicable pour les primitives. BTW, pourquoi avez-vous besoin de cela? Quelle est l'utilité?

Questions connexes