3 votes

Reflection getDeclaredMethods() et classe qui n'est pas dans le classpath

J'utilise la réflexion pour obtenir toutes les méthodes d'une classe spécifique.

Cette classe a des références à des classes qui ne sont pas dans mon chemin de classe, donc j'obtiens une exception :

java.lang.NoClassDefFoundError :

Sur ce point :

Method methods[] = theClass.getDeclaredMethods();

Est-il possible, d'une manière ou d'une autre, de "sauter" tout ce qui n'est pas dans le classpath ?

0voto

S E Points 1087

Class.forName() ne chargera pas une classe, qu'elle soit ou non dans le classpath. Elle ne renverra qu'un handle vers une classe déjà chargée.

Une classe est chargée de deux manières principales :

1) La classe est référencée dans les déclarations d'importation (java.lang.* est importée automatiquement, de sorte que toutes les classes du paquetage java.lang sont chargées dès le départ).

2) Une classe est chargée à l'aide d'un appel d'un ClassLoader, auquel cas toutes ses dépendances sont résolues et chargées également.

Ainsi, si vous essayez de charger une classe en dehors du classpath, ou avec des dépendances en dehors du classpath, vous devez sous-classer ClassLoader et lui indiquer comment charger vos classes et leurs dépendances.

Voir la spécification de ClassLoader ici : http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/ClassLoader.html

Il existe également des sous-classes de ClassLoader prêtes à l'emploi qui peuvent faire ce que vous voulez, comme URL ClassLoader, qui vous permet simplement de faire pointer l'instance de ClassLoader sur le chemin d'accès et de charger toutes les classes qui s'y trouvent.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X