2010-02-15 4 views

Répondre

2

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.

1

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.

1

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.

4

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(); 
+0

Cette instance est-elle créée en utilisant la réflexion? – greg

+0

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". –

+1

Oui, c'est une réflexion. L'objet java.lang.Class donne accès à toutes les méthodes de réflexion. –

3

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é.

+0

Wtf était ce downvote? : D C'mon, laissez un commentaire afin que nous puissions discuter et apprendre les uns avec les autres. – BalusC

1

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.