Java反射:如何获得没有参数的方法



我正在做一份关于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();
        }
    }
}

输出如下内容:

你想跑什么课?计数器
public int Counter.c
public void Counter.reset()
public void Counter.increment()
public void counter . decimal ()
java.lang.Object.wait(long)抛出java.lang.InterruptedException
java.lang.Object.wait()抛出java.lang.InterruptedException
public final void java.lang.Object.wait(long,int)抛出java.lang.InterruptedException
java.lang.Object.equals(java.lang.Object)
java.lang.Object.toString()
public native int java.lang.Object.hashCode()
java.lang.Object.getClass()
java.lang.Object.notify()
java.lang.Object.notifyAll()

是否有一种方法可以只打印没有参数的那些?另外,我对作业细节的理解是否正确?或者短语"不指定参数的公共方法"可能意味着其他东西,我有完全错误的想法?

您看过Method类的API吗?有一个名为getParameterTypes()的方法,它有您正在寻找的答案,并且API显式地声明如果没有参数,它将返回什么。只要在返回的方法的for循环中调用这个你应该在flint

只使用Method类的getParameterTypes函数。如果返回值为0,则该函数没有参数。Java文档中的关键部分:

getParameterTypes

public Class[] getParameterTypes()

Returns an array of Class objects that represent the formal parameter types, in declaration order, of the method represented by

这个方法对象。返回一个长度为0的数组方法不接受任何参数。

Returns:
    the parameter types for the method this object represents

相关内容

  • 没有找到相关文章

最新更新