首页 文章

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

提问于
浏览
9

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

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

}

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

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

2 回答

  • 5

    你看过Method类的API了吗?有一个名为getParameterTypes()的方法可以找到你想要的答案,并且API明确说明如果没有参数,它将返回什么 . 只需在返回的方法的for循环中调用它,你就应该像flint一样 .

  • 14

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

    getParameterTypes public Class [] getParameterTypes()返回Class对象的数组,这些对象表示由声明顺序表示的方法的形式参数类型 .
    这个Method对象 . 如果基础方法不带参数,则返回长度为0的数组 . 返回:
    此对象表示的方法的参数类型

相关问题