Осваиваем ClassLoader и Reflection

  • 16
  • Недоступна
Аргументом для класса Solution является абсолютный путь к пакету. Имя пакета может содержать File.separator. В этом пакете кроме скомпилированных классов (.class) могут находиться и другие файлы (например: .java). Известно, что каждый класс имеет конструктор без параметров и реализует интерфейс Hidd
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (78)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Виноградина
Уровень 48, Berkeley, United States
17 ноября 2021, 21:22
похоже проходит только через
public static class MyClassLoader extends ClassLoader {
        public Class<? extends HiddenClass> load(Path path) {
             ...
             ... defineClass(String name, byte[] buf, int start, int len);
tremb
Уровень 37, Москва, Россия
10 ноября 2021, 21:00
2919 Оказывается можно не указывать binary name
Иван
Уровень 41, Рязань, Россия
1 ноября 2021, 10:57
Какой то бред Exception in thread "main" java.lang.ClassNotFoundException: FirstHiddenClassImpl.class, не понимаю как его может не быть если он есть изначально в пакете
Ars
Уровень 41
25 ноября 2021, 08:32
Он не в пакете. В main указан путь к пакету который в папке out.
RFedorenkov
Уровень 47, Москва, Россия
17 октября 2021, 19:34
в пакете 'com/' не ищется, пока не надо в 'ru/ 14 попыток, едем дальше
Тимур
Уровень 38, Москва, Россия
17 октября 2021, 22:12
Может исправили уже, у меня все норм нашло...
Artamon Khakimov
Уровень 32, Казань, Россия
8 октября 2021, 07:00
Всем привет. Вот сижу и ничего не понимаю. Вроде бы делал всё постепенно, но задачу не пойму. Ребята, кто-нибудь подскажите статьи или ссылки на видео с данной темой задачи.
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().
Maks Panteleev Java Developer в Bell Integrator
23 июля 2021, 09:02
задача 1 в 1 как предыдущая такая, я почти весь код скопировал оттуда, пару нюансов только поменял - доступ к конструктору) потратил кучу попыток на валидацию - оказалось что все дело в ключе getHiddenClassObjectByKey(String key) - его так же надо привести к нижнему регистру, иначе не проходит валидация)
Ars
Уровень 41
25 ноября 2021, 08:34
Спасибо. Этот момент был крайне неожиданным. Вот прям от слова совсем.
Alex Prosmickii
Уровень 27, Минск, Беларусь
21 июля 2021, 14:39
мда, вымучил задачу, все работало, компилятор не принимал. Забил, скопировал полностью решение - не работает, зато компилятор принял.
Алексей
Уровень 37, Москва, Россия
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)!!!
Alexey
Уровень 36, Россия
29 апреля 2021, 11:01
Постановка задачи - тихий ужас. Наверное авторы готовят к суровой реальности как на картинке.
Питруха
Уровень 41
28 апреля 2021, 10:51
Пока полностью не скопировал готовые решения из методов. Выдавало ошибку "Метод main не изменяй". Разумеется я его не трогал.😐