No, esto no es posible de una manera totalmente confiable; sin embargo, puede ser práctico implementarlo en muchos casos.
Debido a la flexibilidad de los cargadores de clase Java, las clases definidas en un paquete particular pueden no conocerse en tiempo de ejecución (por ejemplo, considerar un cargador de clases especial que define las clases sobre la marcha, quizás cargándolas de la red, o compilándolos ad-hoc). Como tal, no existe una API Java estándar que le permita enumerar las clases en un paquete.
En términos prácticos, sin embargo, podría hacer algunos trucos buscando en la ruta de clases para todos los archivos de clase y JAR, creando una colección de nombres de clase totalmente calificados, y buscándolos como desee. Esta estrategia funcionaría bien si está seguro de que ningún cargador de clases activo se comportará como se describe en el párrafo anterior. Por ejemplo (pseudocódigo de 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...
¿Qué significa "agregar una clase en este paquete"? ¿Cómo se obtiene en el classpath del proceso java? –
@Jeffrey Estaba leyendo sobre Reflection y creo que esta es la única forma, pero no sé nada sobre Reflection. Intenté de una "manera normal" agregar una verificación para cada clase que tengo en ese paquete, pero no quiero de esta manera porque no es expansible. –
@MiserableVariable En tiempo de desarrollo, agrego una nueva clase en el paquete (todas las clases extienden una clase abstracta llamada Documento). –