java:Class

Un article de Polydoc.

Sommaire

[modifier] Description

La class Class représente la classe d'un objet. Elle est obtenue via la méthode object.getClass(). Elle permet notamment d'obtenir le nom de la classe exacte de l'objet (par exemple, si l'on sais juste que l'objet implémente une interface donnée et que l'on veut savoir qu'elle est son implémentation exacte) ou de construire facilement un nouvel objet (pour peu que cette classe dispose d'un constructeur public sans argument).

[modifier] Construction

Un objet Class est automatiquement construit dès que l'on fait à une classe. On peut l'obtenir via la méthode de la classe Object getClass() ou via la propriété statique class que possède n'importe quelle classe ou interface (exemple String.class). L'autre mode de construction est de construire à partir d'une chaîne via la méthode statique Class.forName().

[modifier] Principales méthodes

[modifier] String getName()

Retourne le nom de classe. C'est le nom complet avec le package (exemple : « java.util.ArrayList).

[modifier] Object newInstance()

Crée une nouvelle instance de la classe. Cela suppose que la classe dipose d'un constructeur public sans argument.

[modifier] static Class forName(String className)

Construit une classe à partir de son nom. Des exceptions seront envoyées si la classe est introuvable.

[modifier] Exemples

Supposons que vous utilisez une interface fr.monappli.Data comme source de données de votre application et que vous déclinez cette interface en différentes implémentations (exemple : fr.monappli.RuntimeData pour des données stockés en mémoire, fr.monappli.FileData pour des données dans un fichier, fr.monappli.SqlData pour des données dans une base SQL,etc) et vous voulez que l'implémentation exacte soit définie par un argument précisant le nom de la classe à utiliser, vous devez simplement vous imposer la contrainte que chaque implémentation dispose d'un constructeur public sans argument et utilisez le code suivant :

String className="fr.monappli.FileData";
try {
Class classe = Class.forName(className);
fr.monappli.Data data = (fr.monappli.Data) classe.newInstance();
}
catch(ClassNotFoundException cnfe) {
}
catch(IllegalAccessException iae) {
}
catch(InstantiationException ie) {
}
catch(ClassCastException cce) {
}