À quoi sert le type java class
? Je suis confus au sujet de ce que cela signifie et comment il est différent de déclarer un type object
:Types de classe java - que signifient-ils?
Class className;
Merci
À quoi sert le type java class
? Je suis confus au sujet de ce que cela signifie et comment il est différent de déclarer un type object
:Types de classe java - que signifient-ils?
Class className;
Merci
Class
est un type spécial de Object
, i.e. Class
est une sous-classe de Object
. Chaque classe que vous définissez a son propre objet Class
. Vous pouvez y accéder en tant que MyObject.class
ou myInstance.getClass()
. Dans un autre mot, toute classe que vous définissez a un attribut Class
où comme toute classe est un Object
. Je suis d'accord, il est légèrement déroutant pour un débutant.
javadoc dit:
instances de la classe de classe représentent des classes et interfaces dans une application Java en cours d'exécution. Une énumération est une sorte de classe et une annotation est une sorte d'interface. Chaque tableau appartient également à une classe qui est reflétée comme un objet Class partagé par tous les tableaux avec le même type d'élément et le même nombre de dimensions. Les types Java primitifs (booléen, octet, char, short, int, long, float et double) et le mot-clé void sont également représentés en tant qu'objets de classe.
La classe n'a pas de constructeur public. À la place, les objets Class sont construits automatiquement par la machine virtuelle Java lorsque les classes sont chargées et par des appels à la méthode defineClass dans le chargeur de classe.
Vous pouvez l'utiliser pour vérifier le type d'une variable ou vérifier l'exécution de l'héritage. Il est également utilisé en réflexion, pour charger dynamiquement les types et exécuter des méthodes sur eux.
Il existe plusieurs utilisations pour un objet Class. Par exemple, disons que je veux créer une instance d'une classe basée sur un nom de classe stocké dans un fichier de configuration.
String className = config.myClass;
Class clazz = Class.forName(className);
Object myClassInstance = clazz.newInstance();
Il représente le type d'exécution de l'objet. L'utilisation programmatique réelle du type Class
se trouve souvent dans reflection et generics.
Par exemple, le chargement d'un pilote JDBC abstraitement avec l'aide de Class#forName()
:
String jdbcDriverClassName = getItFromSomeExternalConfigurationFile();
Class.forName(jdbcDriverClassName);
Ou typecasting un Object
générique à un type de beforeknown:
public static <T> T findAttribute(String key, Class<T> type) {
return type.cast(attributeMap.get(key)); // It's a Map<String, Object>.
}
... qui peut être utilisé comme
SomeType instance = findAttribute("someKey", SomeType.class);
Un exemple plus étendu peut être trouvé here dans la saveur d'un "convertisseur d'objet générique".
En fait, en lisant le java.lang.Class
javadoc, en incluant toutes les méthodes disponibles, vous devriez avoir une idée de ce pour quoi il peut être utilisé.
Wtf était ce downvote? : D C'mon, laissez un commentaire afin que nous puissions discuter et apprendre les uns avec les autres. – BalusC
Du livre Thinking in Java:
L'objet classe
Pour comprendre comment l'information Durée type (RTTI) fonctionne en Java, vous devez d'abord savoir comment les informations de type est représenté au moment de l'exécution . Ceci est accompli par un type spécial d'objet appelé l'objet Class, qui contient des informations sur la classe. En fait, l'objet Class est utilisé pour créer tous les objets 'réguliers' de votre classe.
Cette instance est-elle créée en utilisant la réflexion? – greg
Je ne suis pas sûr exactement de ce qu'est la définition de la réflexion. J'ai toujours pensé à demander à une classe de se connaître. Par exemple, une fois que vous obtenez l'objet Class pour une classe, vous pouvez demander une liste de ses méthodes et de ses champs. Vous pouvez même invoquer l'une de ses méthodes. L'objet Class.getDeclaredMethods vous renvoie une instance de méthode sur laquelle vous pouvez appeler "invoke". –
Oui, c'est une réflexion. L'objet java.lang.Class donne accès à toutes les méthodes de réflexion. –