Как загрузить класс, используя только имя класса
Мне нужно использовать Java Class.forName("") для загрузки одного из моих классов. Проблема в том, что мне нужно загрузить класс, указав только имя класса, а НЕ полное имя класса.
Например, это работает, но не соответствует моим требованиям:
Class.forName ("reflection.Person");
И это то, что мне нужно, но не работает
Class.forName ("Человек");
Кто-нибудь знает, как заставить № 2 работать? Мне просто нужно использовать простое имя класса. Любые сторонние инструменты, которые пройдут через мою структуру папок, чтобы проверить, существует ли класс? Это будет развернуто как исполняемый файл JAR.
Заранее спасибо.
2 ответа
Вы должны получить все классы на пути к классам, итерировать их и посмотреть, какой из них имеет простое имя, равное требуемому. Тогда делай Class.forName(..)
с полным именем. Обратите внимание, что одно и то же имя может использоваться в нескольких пакетах.
Вам лучше поискать классы, реализующие интерфейс или помеченные конкретной аннотацией. Полагаться на простое имя может быть очень сложно, особенно если ваш путь к классам растет.
Вы должны понимать, что значение имени класса, такого как "Человек", зависит от того, где оно встречается в исходном коде. Удобство компилятора Java - не требовать полностью определенных имен классов везде. Но во время выполнения в байтовом коде все имена классов полностью определены.