2010-02-15 9 views

Respuesta

2

Class es un tipo especial de Object, es decir Class es una subclase de Object. Cada clase que defina tiene su propio objeto Class. Puede acceder a esto como MyObject.class o myInstance.getClass(). En otra palabra, cualquier clase que defina tiene un atributo Class donde, como cualquier clase, es Object. Estoy de acuerdo en que es un poco confuso para un novato.

1

javadoc dice:

instancias de la clase clase representan clases e interfaces en una aplicación Java que se ejecuta. Una enumeración es un tipo de clase y una anotación es un tipo de interfaz. Cada matriz también pertenece a una clase que se refleja como un objeto Clase que comparten todas las matrices con el mismo tipo de elemento y número de dimensiones. Los tipos primitivos de Java (booleano, byte, char, corto, int, largo, flotante y doble) y la palabra clave void también se representan como objetos de clase.

La clase no tiene un constructor público. En cambio, los objetos de clase los construye automáticamente Java Virtual Machine a medida que se cargan las clases y mediante llamadas al método defineClass en el cargador de clases.

1

Puede usarlo al verificar el tipo de alguna variable o comprobar el tiempo de ejecución de la herencia. También se usa en reflexión, para cargar dinámicamente tipos y ejecutar métodos sobre ellos.

4

Existen varios usos para un objeto Class. Por ejemplo, supongamos que quiero crear una instancia de una clase basada en algún nombre de clase almacenado en un archivo de configuración.

String className = config.myClass; 
Class clazz = Class.forName(className); 
Object myClassInstance = clazz.newInstance(); 
+0

¿Se creó esta instancia utilizando la reflexión? – greg

+0

No estoy seguro de cuál es la definición de reflexión. Siempre lo he pensado como preguntarle a una clase sobre sí misma. Por ejemplo, una vez que obtiene el objeto Clase para una clase, puede solicitar una lista de sus métodos y campos. Incluso puede invocar uno de sus métodos. El objeto Class.getDeclaredMethods le devuelve una instancia de Método a la que puede llamar "invocar". –

+1

Sí, eso es reflejo. El objeto java.lang.Class da acceso a todos los métodos de reflexión. –

3

Se representa el tipo de tiempo de ejecución del objeto. El uso programático real del tipo Class se encuentra a menudo en reflection y generics.

Por ejemplo, la carga de un controlador JDBC de forma abstracta con la ayuda de Class#forName():

String jdbcDriverClassName = getItFromSomeExternalConfigurationFile(); 
Class.forName(jdbcDriverClassName); 

O typecasting un genérico Object a un tipo beforeknown:

public static <T> T findAttribute(String key, Class<T> type) { 
    return type.cast(attributeMap.get(key)); // It's a Map<String, Object>. 
} 

... que puede ser utilizado como

SomeType instance = findAttribute("someKey", SomeType.class); 

Un ejemplo más extendida se puede encontrar here en el sabor de un "convertidor genérico de objetos".

En realidad, leer java.lang.Class javadoc, incluidos todos los métodos disponibles, debería darle una idea de para qué se puede usar.

+0

Wtf fue ese vástago sobre? : D Vamos, dejen un comentario para que podamos debatir y aprender con/de los demás. – BalusC

1

Del libro Thinking in Java:

El objeto Class

Para entender cómo funciona Run Time Tipo de Información (RTTI) en Java, primero debe saber qué tipo de información se representa en tiempo de ejecución . Esto se logra a través de un tipo especial de objeto llamado objeto Clase, que contiene información sobre la clase. De hecho, el objeto Class se usa para crear todos los objetos 'regulares' de su clase.

Cuestiones relacionadas