Un objeto de clase es una especie de metaobjeto que describe la clase de un objeto.Se usa principalmente con las capacidades de reflexión de Java. Puedes pensarlo como un "anteproyecto" de la clase real. P.ej. usted tiene una clase Coche como este:
public class Car {
public String brand;
}
Luego puede construir un objeto de clase que describa su clase de "automóvil".
Class myCarClass = Class.forName("Car");
Ahora se puede hacer todo tipo de consulta en su clase de coches en ese objeto Clase:
myCarClass.getName() - returns "Car"
myCarClass.getDeclaredField("brand") - returns a Field object describing the "brand" field
y así sucesivamente. Cada objeto java tiene un método getClass() que devuelve el objeto Class que describe la clase del objeto Java. Por lo que podría hacer algo como:
Car myCar = new Car();
Class myCarClass = myCar.getClass();
Esto también funciona para objetos que no conoce, por ejemplo, objetos que se obtiene de la parte exterior:
public void tellMeWhatThisObjectsClassIs(Object obj) {
System.out.println(obj.getClass().getName());
}
Se podía alimentar a este método cualquier objeto java y imprimirá la clase real del objeto que le ha asignado.
Al trabajar con Java, la mayoría de las veces no tiene que preocuparse por los objetos de clase. Sin embargo, tienen algunos casos de uso prácticos. P.ej. le permiten instanciar mediante programación objetos de una determinada clase, que se utiliza a menudo para la serialización y deserialización de objetos (por ejemplo, convertir objetos Java a XML y viceversa, en su mayoría, de vuelta).
Class myCarClass = Class.forName("Car");
Car myCar = myCarClass.newInstance(); // is roughly equivalent to = new Car();
También puede usarlo para encontrar todos los campos o métodos de la clase, etc., lo cual es muy útil en ciertos casos declarados. Por ejemplo, si le entregan su método a un objeto desconocido y necesita saber más al respecto, como si incluye alguna interfaz, etc., la clase es su amiga aquí.
En pocas palabras, las clases de Clase, Campo, Método, etc. que se encuentran en el paquete java.lang.reflect le permiten analizar sus clases, métodos, campos definidos, crear nuevas instancias de ellos, llamar a métodos todos tipos de otras cosas y te permiten hacer esto de forma dinámica en tiempo de ejecución.
Y es divertido pensar en esto más. La clase 'Class' hereda de' Object' en sí. 'Class.class' devuelve un objeto' Class' que representa la clase 'Class'. Puedes reflexionar sobre la reflexión. MI CABEZA ASPLODE. – cdhowie
@cdhowie No he usado mucho Ruby, ¿eh? :-) –
@pst: Tengo. Me hace querer lastimar a la gente.Cualquier lenguaje/framework con [muchos] (http://ruby-doc.org/core/classes/Object.html) métodos en su tipo de raíz merece ser enterrado. Tiene el síndrome de PHP al estilo aleatorio-mierda-al-API-sin-ningún-síndrome de previsión. Cue las llamas ... – cdhowie