2009-06-19 2 views
7

Me di cuenta el otro día que puedo llamar boolean.class, pero no integer.class (o en otras primitivas). ¿Qué hace que boolean sea tan especial?boolean.class?

Nota: Estoy hablando de boolean.class, no Boolean.class (que tendría sentido).

Duh: Intenté integer.class, no int.class. No me siento tonto: \

Respuesta

9

No integer.class pero int.class. Sí tu puedes. JRE 6:

public class TestTypeDotClass{ 
    public static void main(String[] args) { 
     System.out.println(boolean.class.getCanonicalName()); 
     System.out.println(int.class.getCanonicalName()); 
     System.out.println(float.class.getCanonicalName()); 
     System.out.println(Boolean.class.getCanonicalName()); 
    } 
} 

salidas

boolean 
int 
float 
java.lang.Boolean 
6

Puedes hacer int.class. Da lo mismo que Integer.TYPE.

int.class.isPrimitive(), boolean.class.isPrimitive(), void.class.isPrimitive(), etc., dará un valor de true. Integer.class.isPrimitive(), Boolean.class.isPrimitive(), etc., dará un valor de false.

3

Bien se puede hacer algo como int.class así

System.out.println(int.class); 

La palabra clave .class se introdujo con Java 1.1 para tener una forma consistente para conseguir el objeto de la clase de tipos de clases y tipos de datos primitivos.

class: Java Glossary

3

booleano no es especial. Puede llamar al

int.class 

por ejemplo. Todos los tipos primitivos tienen este literal. A partir de Sun Tutorial:

Por último, también hay un tipo especial de literal llamada una clase literal, formada mediante la adopción de un nombre de tipo y añadiendo ".class"; por ejemplo, String.class. Esto se refiere al objeto (de tipo Clase) que representa el tipo en sí.

0

continuación Quizás tonta, pero ¿por qué es posible asignar a boolean.class Clase <booleana>, aunque hashcodes son diferentes?

final Class<Boolean> c = boolean.class;  
System.out.println("c := "+c); 
System.out.println("boolean.class := "+boolean.class); 
System.out.println("Boolean.class := "+Boolean.class); 
System.out.println("boolean.class == Boolean.class := "+(boolean.class == Boolean.class)); 
System.out.println("boolean.class.equals(Boolean.class) := "+boolean.class.equals(Boolean.class)); 
System.out.println("boolean.class.hashCode := "+boolean.class.hashCode()); 
System.out.println("Boolean.class.hashCode := "+Boolean.class.hashCode()); 
+0

Porque el tipo de 'boolean.class' es' Clase '. Las primitivas no se pueden usar como argumentos de tipo, por lo que no existe el tipo 'Clase '. Y es mejor no enviar preguntas como respuestas. Esta debería ser su propia pregunta, o tal vez un comentario sobre una de las otras respuestas. – gdejohn