Java-код для создания экземпляра другого Java-файла - PullRequest
1 голос
/ 07 марта 2011

Я хочу написать программу для динамического вызова метода внутри другого Java-класса (не скомпилированного), чье имя файла с указанием местоположения указано. Для этого я использовал следующий код, но он не работал.

//folder location of my java file to be loaded
String url = "C:/Temp/testcases/test.java"; 
//name of the java file to be loaded
String classname = "test.java"; 
this.class.classLoader.rootLoader.addURL(new URL(url+str));
Class.forName(str).newInstance();

Приведенный выше экземпляр не может вызвать метод внутри Java-файла, который я хочу загрузить динамически. В чем ошибка?

Ответы [ 2 ]

3 голосов
/ 07 марта 2011

Загрузчик классов может загружать только скомпилированные классы.Он не может открывать исходные файлы Java, компилировать их на лету и загружать их класс.

Более того, имя класса не совпадает с именем файла.

0 голосов
/ 31 марта 2011

Я согласен с вашим ответом.Ошибка в приведенном выше коде с новым URL (C: // ...).Если бы я правильно назвал имя пакета по пути, он должен был бы работать.В любом случае я имел дело с groovy файлами, поэтому нашел этот код более эффективным, чем обычный class.forname, о котором я упоминал выше.

def sourceString = (new File(C:/xyz.groovy)).getText()
ClassLoader parent = getClass().getClassLoader();
GroovyClassLoader loader = new GroovyClassLoader(parent);
Class groovyClass = loader.parseClass(sourceString);
template =  groovyClass.newInstance()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...