Есть пакет javaapplication7, в нем 3 простых класса A,B,C, затрудняюсь получить их.
Вот пример класса, который сканирует пакет, и возвращает список его классов
вpublic class ClassFinder {
private static final char PKG_SEPARATOR = '.';
private static final char DIR_SEPARATOR = '/';
private static final String CLASS_FILE_SUFFIX = ".class";
private static final String BAD_PACKAGE_ERROR = "Unable to get resources from path '%s'. Are you sure the package '%s' exists?";
/**
* Возвращает список классов в пакете
*/
public static List<Class<?>> find(String scannedPackage) {
String scannedPath = scannedPackage.replace(PKG_SEPARATOR, DIR_SEPARATOR);
URL scannedUrl = Thread.currentThread().getContextClassLoader().getResource(scannedPath);
if (scannedUrl == null) {
throw new IllegalArgumentException(String.format(BAD_PACKAGE_ERROR, scannedPath, scannedPackage));
}
File scannedDir = new File(scannedUrl.getFile());
List<Class<?>> classes = new ArrayList<>();
for (File file : scannedDir.listFiles()) {
classes.addAll(find(file, scannedPackage));
}
return classes;
}
private static List<Class<?>> find(File file, String scannedPackage) {
List<Class<?>> classes = new ArrayList<>();
String resource = scannedPackage + PKG_SEPARATOR + file.getName();
if (file.isDirectory()) {
for (File child : file.listFiles()) {
classes.addAll(find(child, resource));
}
} else if (resource.endsWith(CLASS_FILE_SUFFIX)) {
int endIndex = resource.length() - CLASS_FILE_SUFFIX.length();
String className = resource.substring(0, endIndex);
try {
classes.add(Class.forName(className));
} catch (ClassNotFoundException ignore) {
}
}
return classes;
}
}
Пример вызова
List<Class<?>> classes = ClassFinder.find("examples.concurrency");
Можете воспользоваться библиотекой: Class graph Maven Central
Пример:
try (ScanResult scanResult = new ClassGraph()
.whitelistPackages("javax.persistence") // Сканирует пакет javax.persistence и все его подпакеты
.scan()) {
for (ClassInfo classInfo : scanResult.getAllClasses()) {
System.out.println(classInfo.getName());
}
}
Могу предложить библиотеку Reflections
. С ее помощью можно легко получить информацию о классах для заданного пакета:
private static List<Class<?>> getAllClassesFrom(String packageName) {
return new Reflections(packageName, new SubTypesScanner(false))
.getAllTypes()
.stream()
.map(name -> {
try {
return Class.forName(name);
} catch (ClassNotFoundException e) {
return null;
}
})
.filter(Objects::nonNull)
.collect(Collectors.toList());
}
Зависимость:
<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>
<version>0.9.10</version>
</dependency>
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Необходимо, чтобы при клике на кнопку, окно загрузки файлов открывалось с определенным acceptВ моем примере, accept применяется уже после того,...
В таблицу HTML выводятся данные из БД PostgresИ рядом с каждым полем должна выводится кнопка "Удалить клиента"
Посмотрите где у меня ошибка в коде, который будет проверять введенное значение, и говорить, сдали вы тест или нет