2010-12-13 6 views
0

Je souhaite créer un objet Je connais uniquement son chemin de classe Toute aide sera appréciée.comment utiliser le package de réflexion pour créer un objet à partir d'un chemin de classe

+1

Pouvez-vous préciser ce que vous entendez par _ _ Exactement ce que informations avez-vous à travailler avec? +1 au commentaire de @ BalusC également. –

+2

Que voulez-vous dire par "classpath"? Le nom complet de la classe dans un 'java.lang.String' ou l'emplacement du chemin de classe dans un' java.net.URL' (obtenu par 'ClassLoader # getResource()') ou un chemin de fichier absolu dans 'java.io. Fichier'? – BalusC

+0

Classpath? Si vous voulez dire quelque chose le long des lignes "org.mycompany.FirstClass" que vous êtes prêt à partir! Ce type de chaîne s'appelle Fully Qualified Name. – Rekin

Répondre

5

Si vous avez le nom de classe qualifié complet dans un String, utilisez Class#forName() et Class#newInstance().

Object o = Class.forName("com.example.Foo").newInstance(); 

Ceci nécessite cependant que la classe soit déjà présente dans le chemin de classe et ait un constructeur par défaut (implicite).

Si ce n'est pas, et vous avez l'emplacement de classe dans un URL, puis utilisez URLClassLoader et passer à une autre méthode Class#forName() qu'il accepte comme argument.

URL url = getItSomehow(); 
URLClassLoader classLoader = URLClassLoader.newInstance(new URL[] { url }); 
Object o = Class.forName("com.example.Foo", true, classLoader).newInstance(); 

Ou, si vous l'avez dans un File à la place, puis le convertir en URL premier: « Je ne connais que son classpath »

File file = getItSomehow(); 
URL url = file.toURI().toURL(); 
// Continue with URLClassLoader. 
+0

OK, mais si je veux appeler n'importe quelle méthode appartient à la classe, que je connais son chemin ou nom qualifié –

+0

C'est une question différente, donc voici juste un lien tutoriel au lieu d'une réponse: http://download.oracle. com/javase/tutorial/reflect/member/methodInvocation.html Si vous êtes bloqué, appuyez sur le bouton 'Ask Question' en haut à droite. N'oubliez pas d'inclure des détails sur l'étape particulière avec laquelle vous êtes bloqués, de préférence avec un petit extrait de code qui reproduit exactement votre problème. Soyez prudent avec le choix et l'utilisation des bons termes. Le terme "classpath" n'était apparemment pas ce que vous pensiez que c'était :) – BalusC

+0

OK, mais je tiens à préciser que dans mon projet j'ai 3 paquets avec 3 classes que je veux dans 4ème paquet et 4ème classe pour instancier un objet de l'un des trois classes dans les 3 paquets selon l'entrée de l'utilisateur. –

1

Voulez-vous dire cela?

Class c = Class.forName("java.lang.String"); 
Questions connexes