Аргументом для класса Solution является абсолютный путь к пакету.
Имя пакета может содержать File.separator.
В этом пакете кроме скомпилированных классов (.class) могут находиться и другие файлы (например: .java).
Известно, что каждый класс имеет конструктор без параметров и реализует интерфейс Hidd
Осваиваем ClassLoader и Reflection
- 16
Недоступна
Комментарии (81)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Алексей Лаврентьев Software Developer
2 июля, 11:11
Задача очень похожа на предыдущую задачу c ClassLoader'ом (я сделал copy/paste из неё) и ту, где надо создать объект класса, у которого есть только private-конструктор без параметров. Каждый вызов метода getHiddenClassObjectByKey() должен создавать свой объект класса, иначе валидатор не примет. Фабрика в данном случае - это просто метод, который создаёт объект класса, а не тот шедевр архитектуры ПО, который мы создавали в предыдущей большой задаче "Фабрики" 🙂
0
LuneFox инженер по сопровождению в BIFIT Expert
17 февраля, 16:49
Ну да, ну да, пошёл я нафиг...
Тем временем, готовое решение от валидатора делает это:
![]()



+2
Максим Дудин
31 мая, 12:44
Если поменять ru/ на com/, то работает, но при валидации выдаёт
а если не менять, то проходит валидацию, но не работает..

0
Nik Grape
17 ноября 2021, 21:22
похоже проходит только через
0
tremb
10 ноября 2021, 21:00
2919
Оказывается можно не указывать binary name
0
Иван
1 ноября 2021, 10:57
Какой то бред Exception in thread "main" java.lang.ClassNotFoundException: FirstHiddenClassImpl.class, не понимаю как его может не быть если он есть изначально в пакете
0
Ars
25 ноября 2021, 08:32
Он не в пакете. В main указан путь к пакету который в папке out.
0
RFedorenkov
17 октября 2021, 19:34
в пакете 'com/' не ищется, пока не надо в 'ru/
14 попыток, едем дальше
0
Тимур
17 октября 2021, 22:12
Может исправили уже, у меня все норм нашло...
0
Artamon Khakimov
8 октября 2021, 07:00
Всем привет. Вот сижу и ничего не понимаю. Вроде бы делал всё постепенно, но задачу не пойму. Ребята, кто-нибудь подскажите статьи или ссылки на видео с данной темой задачи.
0
Aleksandr Alekseenko Network engineer
12 августа 2021, 04:16
В этот раз было действительно смешно.
При формировании бинарного имени класса необходимо было заменить com/ на ru/
В методе main указан com/.
Явная ошибка валидатора.
Делал через ClassLoader classLoader = Solution.class.getClassLoader(), без создания анонимных классов.
Постараюсь собрать все замечения, что были отмечены ниже.
1. Доступ к файлам через files.listFiles(). SonarLint подсказал вот такое интересное усовершенствование. Objects.requireNonNull(files.listFiles())
2. Формировать бинарное имя класса можно, как угодно. Только перед проверкой у вали не забыть заменить com на ru.
3. В методе getHiddenClassObjectByKey ключ (key) и clazz.getSimpleName(), перед использованием метода contains(), привести к toLowerCase()
4. Получение конструктора через getDeclaredConstructor().
+7
Maks Panteleev Java Developer в Bell Integrator
23 июля 2021, 09:02
задача 1 в 1 как предыдущая такая, я почти весь код скопировал оттуда, пару нюансов только поменял - доступ к конструктору)
потратил кучу попыток на валидацию - оказалось что все дело в ключе getHiddenClassObjectByKey(String key) - его так же надо привести к нижнему регистру, иначе не проходит валидация)
+3
Ars
25 ноября 2021, 08:34
Спасибо. Этот момент был крайне неожиданным. Вот прям от слова совсем.
0
Alex Prosmickii
21 июля 2021, 14:39
мда, вымучил задачу, все работало, компилятор не принимал. Забил, скопировал полностью решение - не работает, зато компилятор принял.
0
Алексей
6 августа 2021, 13:56
чтобы программа заработала - нужно в строке ниже поменять lastIndexOf("ru/") на lastIndexOf("com/"):
String className = packageName.replaceAll("[/\\\\]", ".").substring(packageName.lastIndexOf("ru/")) + "." + fileName.substring(0, fileName.length() - 6);
Все дело в том, что в packageName такой подстроки "ru/" нет, поэтому lastIndexOf возвращает -1, и прога выкидывает исключение неправильный индекс массива в substring(-1)!!!
+1