Un objet de classe est une sorte de méta-objet décrivant la classe d'un objet.Il est principalement utilisé avec les capacités de réflexion de Java. Vous pouvez le voir comme un «plan» de la classe réelle. Par exemple. vous avez une classe Car comme ceci:
public class Car {
public String brand;
}
Vous pouvez ensuite construire un objet Class qui décrit votre classe "Car".
Class myCarClass = Class.forName("Car");
Maintenant, vous pouvez faire toutes sortes de requêtes sur votre classe de voiture sur cet objet Classe:
myCarClass.getName() - returns "Car"
myCarClass.getDeclaredField("brand") - returns a Field object describing the "brand" field
et ainsi de suite. Chaque objet java a une méthode getClass() qui retourne l'objet Class décrivant la classe de l'objet Java. Ainsi, vous pouvez faire quelque chose comme:
Car myCar = new Car();
Class myCarClass = myCar.getClass();
Cela fonctionne aussi pour les objets que vous ne savez pas, par exemple objets que vous obtenez de l'extérieur:
public void tellMeWhatThisObjectsClassIs(Object obj) {
System.out.println(obj.getClass().getName());
}
Vous pouvez nourrir cette méthode tout objet java et imprimera la classe réelle de l'objet que vous lui avez donné. Lorsque vous travaillez avec Java, la plupart du temps, vous n'avez pas à vous soucier des objets Class. Ils ont quelques cas pratiques d'utilisation bien. Par exemple. ils vous permettent d'instancier par programmation des objets d'une certaine classe, qui est souvent utilisée pour la sérialisation et la désérialisation d'objets (par exemple, la conversion d'objets Java en XML et vice-versa, bien souvent en retour).
Class myCarClass = Class.forName("Car");
Car myCar = myCarClass.newInstance(); // is roughly equivalent to = new Car();
Vous pouvez également utiliser pour trouver tous les champs déclarés ou méthodes de votre classe etc, ce qui est très utile dans certains cas. Ainsi, par exemple Si votre méthode reçoit un objet inconnu et que vous avez besoin d'en savoir plus, comme si elle imbrique une interface, etc, la classe Class est votre ami ici. Bref, les classes Class, Field, Method, etc. qui se trouvent dans le package java.lang.reflect vous permettent d'analyser vos classes, méthodes et champs définis, de créer de nouvelles instances, d'appeler toutes les méthodes sortes d'autres choses et ils vous permettent de le faire de manière dynamique au moment de l'exécution.
Et c'est amusant d'y réfléchir plus avant. La classe 'Class' hérite de' Object' elle-même. 'Class.class' renvoie un objet' Class' qui représente la classe 'Class'. Vous pouvez réfléchir à la réflexion. MON ASPLODE HEAD. – cdhowie
@cdhowie N'a pas beaucoup utilisé Ruby, hein? :-) –
@pst: J'ai. Ça me donne envie de blesser les gens.Tout langage/framework avec [ce nombre] (http://ruby-doc.org/core/classes/Object.html) méthodes sur son type racine mérite d'être enterré. Il a un syndrome de type PHP-aléatoire-merde-sur-le-API-sans-for-pensée. Cue les flammes ... – cdhowie