Я работаю над школьным заданием о рефлексии Java.Подробности приведены ниже:
Напишите консольную программу, которая запрашивает у пользователя имя класса, загружает этот класс и создает его экземпляр.Мы предполагаем, что класс имеет конструктор без каких-либо параметров.Затем программа выводит имена и значения открытых переменных созданного объекта, а также список открытых методов, которые не указывают параметр.Программа должна позволить пользователю выбрать метод и выполнить этот метод на созданном объекте.После этого программа должна снова показать открытые переменные с их значениями и позволить пользователю выбрать метод и так далее.Используйте следующий класс для проверки вашей реализации:
public class Counter {
public int c;
public void increment() { c++; }
public void decrement() { c--; }
public void reset() { c = 0; }
}
Проблема, с которой я столкнулся, связана со следующим предложением: «список открытых методов, которые не указывают параметр».Есть ли способ перечислить только методы без параметров?Я использовал getMethods, но в итоге получаю множество методов из суперклассов Object и Class с параметрами.
Например, следующий код, который я написал:
import java.lang.reflect.*;
import java.io.*;
public class Q1 {
public static void main(String[] args) {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("What class would you like to run? ");
String className = reader.readLine();
Class c = Class.forName(className);
Object o = c.newInstance();
for (Field f : c.getFields())
System.out.println(f);
for (Method m : c.getMethods())
System.out.println(m);
} catch(IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
Выводит следующее:
В каком классе вы хотели бы учиться?Counter
public int Counter.c
public void Counter.reset ()
public void Counter.increment ()
public void Counter.decrement ()
public final native void java.lang.Object.wait (long) выбрасывает java.lang.InterruptedException
публичный финальный void java.lang.Object.wait () выбрасывает java.lang.InterruptedException
публичный финальный void java.lang.Object.wait (long, int) бросает java.lang.InterruptedException
публичный логический java.lang.Object.equals (java.lang.Object)
публичный java.lang.String java.lang.Object.toString ()
публичный собственный intjava.lang.Object.hashCode ()
общедоступный финальный нативный java.lang.Class java.lang.Object.getClass ()
публичный окончательный нативный void java.lang.Object.notify ()
публичный финалnative void java.lang.Object.notifyAll ()
Есть ли способ получить только те, без параметров, которые будут напечатаны?Кроме того, правильно ли мое толкование деталей задания?Или фраза «публичные методы, которые не определяют параметр» может означать что-то еще, и я совершенно не прав?