Java反射:如何获取不带参数的方法

Jig*_*uff 9 java reflection

我正在做一个关于Java反思的学校作业.详情如下:

编写一个控制台程序,询问用户类名,加载该类并创建它的实例.我们假设该类有一个没有任何参数的构造函数.然后,程序打印出创建的对象的公共变量的名称和值,以及未指定参数的公共方法的列表.程序应该让用户选择一个方法并在创建的对象上执行该方法.之后,程序应该再次显示公共变量及其值,并允许用户选择方法,等等.使用以下类来测试您的实现:

public class Counter {
    public int c;
    public void increment() { c++; }
    public void decrement() { c--; }
    public void reset() { c = 0; }
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题与以下句子有关:"未指定参数的公共方法列表".有没有办法只列出没有参数的方法?我使用了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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

输出以下内容:

你想上什么课?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()

有没有办法只获得没有参数的打印?我首先对作业细节的解释是什么?或者,"没有指定参数的公共方法"这个短语可能意味着什么,我完全错误的想法?

Hov*_*els 14

您是否查看了Method类的API?有一个名为getParameterTypes()的方法可以找到您正在寻找的内容,并且API明确说明如果没有参数,它将返回什么.只需在返回的方法的for循环中调用它,你应该像flint一样.


Pau*_*sik 5

只需使用Method类的' getParameterTypes函数.如果返回值为0,则该函数没有参数.Java doc的关键部分:

getParameterTypes

public Class [] getParameterTypes()

Returns an array of Class objects that represent the formal parameter types, in declaration order, of the method represented by
Run Code Online (Sandbox Code Playgroud)

这个Method对象.如果基础方法不带参数,则返回长度为0的数组.

Returns:
    the parameter types for the method this object represents
Run Code Online (Sandbox Code Playgroud)