У меня есть проект, который требует динамического создания классов во время выполнения, где единственной доступной информацией является имя класса в форме String. Я тестирую прямо сейчас с помощью некоторых мертвых простых методов библиотеки Reflection, но мой вопрос в том, почему я должен предоставить полное имя класса, если классы, которые я пытаюсь «динамически» загружать, находятся в одном каталоге? Я использую linux, без среды разработки, только все классы, которые я пытаюсь вызывать в том же каталоге, без каких-либо объявлений пакетов. Должен ли я настраивать систему пакетов для использования Reflection? Вот этот небольшой фрагмент кода ....Библиотека Java Reflection - с использованием Class.forName() без информации о пакете
public class ReflectionTest {
public static void main(String[] args) {
try {
Class nodeClass = Class.forName("Node");
System.out.println(nodeClass.toString());
} catch (ClassNotFoundException cnfe) {
System.out.println("Error");
}
}
}
Теперь это вызывает ошибку. Но когда я создаю экземпляр узла, а затем получаю его полное имя класса с Node.getClass().getName()
, я просто получаю «Узел» взамен. Поэтому я не понимаю, почему библиотека Reflection не работает так же, как вызывать JVM с помощью «java», где, если имя пакета не указано, оно просто выглядит в том же каталоге. Я не уверен, как использовать эту библиотеку с пользовательскими классами, если ни один из моих классов не имеет имя связанного пакета.
Какую именно команду вы используете для запуска 'ReflectionTest'? – matts