Как загрузить класс, используя только имя класса

Мне нужно использовать Java Class.forName("") для загрузки одного из моих классов. Проблема в том, что мне нужно загрузить класс, указав только имя класса, а НЕ полное имя класса.

  1. Например, это работает, но не соответствует моим требованиям:

    Class.forName ("reflection.Person");

  2. И это то, что мне нужно, но не работает

    Class.forName ("Человек");

Кто-нибудь знает, как заставить № 2 работать? Мне просто нужно использовать простое имя класса. Любые сторонние инструменты, которые пройдут через мою структуру папок, чтобы проверить, существует ли класс? Это будет развернуто как исполняемый файл JAR.

Заранее спасибо.

2 ответа

Решение

Вы должны получить все классы на пути к классам, итерировать их и посмотреть, какой из них имеет простое имя, равное требуемому. Тогда делай Class.forName(..) с полным именем. Обратите внимание, что одно и то же имя может использоваться в нескольких пакетах.

Вам лучше поискать классы, реализующие интерфейс или помеченные конкретной аннотацией. Полагаться на простое имя может быть очень сложно, особенно если ваш путь к классам растет.

Вы должны понимать, что значение имени класса, такого как "Человек", зависит от того, где оно встречается в исходном коде. Удобство компилятора Java - не требовать полностью определенных имен классов везде. Но во время выполнения в байтовом коде все имена классов полностью определены.

Другие вопросы по тегам