Quale sarebbe un buon modo per caricare dinamicamente i file di classe java in modo che un programma compilato in un jar possa leggere tutti i file di classe in una directory e usarli, e come si possono scrivere i file in modo che abbiano il nome del pacchetto necessario in relazione al barattolo?Metodo per caricare dinamicamente file di classe java
33
A
risposta
70
Credo che sia un ClassLoader
che stai cercando.
Suggerisco di iniziare osservando l'esempio seguente che carica i file di classe che non si trovano sul percorso della classe.
// Create a File object on the root of the directory containing the class file
File file = new File("c:\\myclasses\\");
try {
// Convert File to a URL
URL url = file.toURL(); // file:/c:/myclasses/
URL[] urls = new URL[]{url};
// Create a new class loader with the directory
ClassLoader cl = new URLClassLoader(urls);
// Load in the class; MyClass.class should be located in
// the directory file:/c:/myclasses/com/mycompany
Class cls = cl.loadClass("com.mycompany.MyClass");
} catch (MalformedURLException e) {
} catch (ClassNotFoundException e) {
}
1
Se si aggiunge una directory al percorso di classe, è possibile aggiungere le classi dopo l'avvio dell'applicazione e quelle classi può essere caricato non appena sono stati scritti nella directory.
7
MyClass obj = (MyClass) ClassLoader.getSystemClassLoader().loadClass("test.MyClass").newInstance();
obj.testmethod();
o
MyClass obj = (MyClass) Class.forName("test.MyClass").newInstance();
obj.testmethod();
Problemi correlati
- 1. Impostazione percorso classe Java per caricare un file di classe
- 2. JQuery per caricare dinamicamente il file Javascript
- 3. Come aggiungere dinamicamente un metodo di classe?
- 4. Come caricare dinamicamente la classe in Objective-C?
- 5. Perl6: come caricare dinamicamente un modulo di classe?
- 6. C++ Caricare dinamicamente le classi
- 7. Posizione preferibile del metodo main() nel file di classe Java
- 8. Come creare una classe dinamicamente in java
- 9. In rotaie è possibile caricare dinamicamente il layout della classe?
- 10. Java - dinamicamente classi di carico
- 11. Come posso definire dinamicamente un metodo alias per un metodo di classe?
- 12. Come chiamare dinamicamente un metodo di classe in .NET?
- 13. java Impossibile trovare o caricare classe principale
- 14. Provare a caricare dinamicamente un'API e un file JS
- 15. Metodo di scarico nella classe Clip Java
- 16. Richiamare dinamicamente un metodo SOAP per nome?
- 17. Assegnare dinamicamente metodo/metodo come variabile
- 18. decltype per metodo classe metodo
- 19. file di classe in conversione file java
- 20. Java classe che estende contenente metodo main
- 21. java chiamare un metodo da un'altra classe
- 22. Gridster - Salva contenuto HTML di div per caricare dinamicamente griglia
- 23. javassist il caricamento di un file di classe nel metodo pre-main (strumentazione java)
- 24. aggiungere metodo a una classe dinamicamente con decoratore
- 25. HTTP PUT per caricare un file in Java
- 26. Come caricare dinamicamente un carattere sotto iOS. (per davvero)
- 27. Java Caricamento dinamico di una classe
- 28. Errore: Impossibile trovare o caricare classe principale - Java Cygwin
- 29. Log4perl: Come caricare dinamicamente le appendici in fase di runtime?
- 30. dinamicamente aggiungendo metodi di classe ad una classe
+1 URLClassLoader è la strada da percorrere! – OscarRyz
Sì, credo che ClassLoader sia quello che sto cercando. Tuttavia, puoi pensare a un modo per utilizzare efficacemente la classe caricata? Potrei farlo implementare un'interfaccia ... ma come potrei fare riferimento a quell'interfaccia? Hmm ... forse se dovessi aggiungere il vaso compilato come un vaso esterno ... in tal caso, che cosa dovrei chiamare il pacchetto della classe caricata? Se ho: /thing/myjar.jar e thing/loadedclasses/class.class, quale sarebbe il pacchetto dichiarato per quella classe? – MirroredFate
Sì, dovresti concordare alcune interfacce o classi astratte che implementano/estendono le classi da caricare. (Oppure affidarsi completamente alla riflessione per le classi caricate.) – aioobe