我正在完成一项关于Java反射的学校任务。具体要求如下:
编写一个控制台程序,询问用户一个类名,加载该类并创建一个实例。我们假设该类有一个没有任何参数的构造函数。然后,程序打印出创建对象的公共变量的名称和值,以及不指定参数的公共方法列表。程序应该让用户选择一个方法并在创建的对象上执行该方法。之后,程序应再次显示带有值的公共变量,并允许用户选择一个方法,依此类推。使用以下类来测试您的实现:
我遇到的问题与以下语句有关:"不指定参数的公共方法列表"。 有没有一种方法只列出没有参数的方法?我使用了getMethods,但最终获取了具有参数的Object和Class超类中的许多方法。
public class Counter { public int c; public void increment() { c++; } public void decrement() { c--; } public void reset() { c = 0; } }
例如,我编写的以下代码:
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) throws java.lang.InterruptedException
public final void java.lang.Object.wait() throws java.lang.InterruptedException
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
public boolean java.lang.Object.equals(java.lang.Object)
public java.lang.String java.lang.Object.toString()
public native int java.lang.Object.hashCode()
public final native java.lang.Class java.lang.Object.getClass()
public final native void java.lang.Object.notify()
public final native void java.lang.Object.notifyAll()是否有办法仅打印不带参数的方法? 另外,我对任务细节的解释正确吗?或者“不指定参数的公共方法”这个短语可能意味着其他事情,而我完全错误了?