2013-03-12 3 views
2

Предположим, что я использую file.list(), чтобы получить все файлы в папке src. Притвориться, что одно имя файла называется Problem0001.java. Можно ли вызвать метод класса Problem0001.java, используя только строку «Problem0001.java»?Вызов статического метода Использование строки имени файла класса в Java

Более глубокое объяснение: Я работаю над проблемами из проекта Euler. Project Euler - это набор проблем, требующих знания математики и программирования. Я хочу, чтобы каждая проблема была решена, это ее собственный класс. Я решил, что было бы здорово, если бы я мог создать меню, в котором я набираю номер проблемы, и ответ появляется на экране. Я начал с оператора switch, который назвал бы класс, у которого было решение проблемы. В конце концов, я решил, что устаю добавлять к заявлению переключателя каждый раз, когда я решаю новую проблему. Я хочу, чтобы компьютер нашел все файлы класса решений и поместил номер решения в список (так как я мог бы пропустить некоторые проблемы). Всякий раз, когда я вхожу в экран меню, список будет распечатан. Я набираю номер решения, которое хочу видеть, и это та часть, где я потерялся. Мне почему-то нужно взять это число и вызвать статический метод класса с тем же номером. Поэтому, если я набираю 3, будет активирован класс File0003.java, или же компилятор работает.

ответ

5

Если у вас есть имя класса, вам придется загрузить класс во время выполнения, используя ClassLoader разжиться .class

Class<?> clazz = Class.forName("org.someorg.SomeClass"); 

После того, как вы есть, что вы можете вызывать статические методы с использованием Reflection

Method method = clazz.getMethod("methodName", String.class); 
method.invoke(null,"someString"); 

Примечание. Предполагая, что метод принимает строку в качестве аргумента String.class

+0

Пожалуйста, пожалейте меня. Что такое «org.someorg.SomeClass». Это связано с вещами на сайтах? Я просто работаю на месте. Вместо этого я заменил бы это на свой каталог? – Nugenrules

+0

Это стандарт для обозначения пакетов: http://docs.oracle.com/javase/tutorial/java/package/namingpkgs.html это поможет вам. –

+0

Большое спасибо. Принял меня однажды, чтобы прочитать, как заставить его работать. В заключение. BTW Я попытался вызвать (null, null), но, похоже, вам нужно поместить объект в Invoke (object, null); это или я не знаю, о чем говорю, но, похоже, работает только тогда, когда я это делаю. – Nugenrules

3

Да, вы можете использовать java Reflection API.

посмотреть, как вызвать метод во время выполнения.

+0

Интересно. Меня не учили в классе. Я прочитаю это и попробую прямо сейчас! – Nugenrules

+0

да это очень интересно! удачи :) – codeMan

Смежные вопросы