No, questo non è possibile in modo totalmente affidabile; tuttavia, può essere pratico da implementare in molti casi.
A causa della flessibilità dei programmi di caricamento classe Java, le classi definite in un particolare pacchetto potrebbero non essere note in fase di esecuzione (ad esempio, considerare uno speciale classloader che definisce le classi al volo, magari caricandole dalla rete, o compilarli ad-hoc). Di conseguenza, non esiste un'API Java standard che consente di elencare le classi in un pacchetto.
In pratica, tuttavia, è possibile eseguire alcuni trucchi eseguendo una ricerca nel classpath per tutti i file di classe e JAR, creando una raccolta di nomi di classe completi e ricercandoli come desiderato. Questa strategia funzionerebbe bene se si è sicuri che nessun classloader attivo si comporterà come descritto nel paragrafo precedente. Ad esempio (pseudocodice Java):
Map<String, Set<String>> classesInPackage = new HashMap();
for (String entry : eachClasspathEntry()) {
if (isClassFile(entry)) {
String packageName = getPackageName(entry);
if (!classesInPackage.containsKey(packageName)) {
classesInPackage.put(packageName, new HashSet<String>());
}
classesInPackage.get(packageName).add(getClassName(entry));
} else if (isJarOrZipFile(entry)) {
// Do the same for each JAR/ZIP file entry...
}
}
classesInPackage.get("com.foo.bar"); // => Set<String> of each class...
Che cosa significa "aggiungere una classe in questo pacchetto"? Come si ottiene nel classpath del processo java? –
@Jeffrey Stavo leggendo su Reflection e penso che questo sia l'unico modo, ma non so nulla di Reflection. Ho provato un "modo normale" aggiungendo una verifica per ogni classe che ho in quel pacchetto, ma non voglio in questo modo perché non è espandibile. –
@MiserableVariable In fase di sviluppo, aggiungo alcune nuove classi nel pacchetto (tutte le classi estendono una classe astratta chiamata Documento). –