¿Cómo se compila esta sentencia de Java sin advertencias?Integer.class y int.class
Class<Integer> x = int.class;
a pesar de que
Integer.class != int.class
Editar: Dicho de una manera diferente, parece como si Integer.class
y int.class
tienen nada en común (ver comentarios abajo), así que ¿por qué tener sentido para esta asignación es posible?
la declaración de 'int.class' es:' pública estática final Clase \t TYPE = (Clase ) Class.getPrimitiveClass ("int"); 'Dado que el parámetro tipo realmente no importa y está enmarcado, es pasable. –
bestsss
@bestsss: El valor está encuadrado pero otras propiedades de la clase no son válidas. Por ejemplo, uno puede usar la reflexión para construir un 'Entero 'usando' Entero.clasificado' pero no hay forma de hacer esto con 'int.class'. – casablanca
no se puede construir un 'int' en absoluto a través de la reflexión, es una primitiva. La decisión es bastante simple: los primitivos están encuadrados, por lo que en cualquier lugar donde se pueda pasar un int, un entero haría (o viceversa). Sin embargo, hay una excepción: los parámetros de clase simples son totalmente diferentes, la reflexión como 'getMethod (" xxx ", Integer.class)' no funcionará para 'xxx (int x)'. – bestsss