Diciamo che un codice java ha un pacchetto chiamato "com.example".C'è un modo per forzare un classloader a caricare un pacchetto anche se nessuna delle sue classi è stata caricata?
In fase di esecuzione, possiamo ottenere questo pacchetto chiamando
Package p = Package.getPackage("com.example"); //(returns null)
o persino ottenere un elenco di tutti i pacchetti chiamando
Packages[] ps = Package.getPackages();
Il problema è - se il ClassLoader non ha ancora caricato alcun classe dal pacchetto, non sarà disponibile per queste chiamate di funzione. Siamo in grado di forzare per caricare il pacchetto con la forza di carico una delle classi del primo pacchetto, in questo modo:
this.getClass().getClassLoader().loadClass("com.example.SomeClass");
Package p = Package.getPackage("com.example"); //(returns non-null)
Tuttavia, questo è hacky e richiede la conoscenza prima del tempo il nome di una classe che appartiene a il pacchetto.
Quindi la domanda è: esiste un modo per ottenere un'istanza di Pacchetto per nome, indipendentemente dal fatto che ClassLoader abbia o meno eseguito qualcosa? Le mie supposizioni su come il classloading/pacchetti sembrano funzionare in questa situazione accurata?
Attenzione alle https://stackoverflow.com/questions/3455267/why-does-class-getpackage-return-the-same-package-for-classes-from-different-pac – Vadzim