Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java反射:如何获取不带参数的方法_Java_Reflection - Fatal编程技术网

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

Java反射:如何获取不带参数的方法,java,reflection,Java,Reflection,我正在做一个关于Java反射的学校作业。详情如下: 编写一个控制台程序,要求用户输入类名,加载 并创建该类的一个实例。我们假设这个类 没有任何参数的构造函数。然后,程序打印出 所创建对象的公共变量的名称和值,以及 还有一个不指定参数的公共方法列表。这个 程序应该允许用户选择一个方法并在其上执行该方法 创建的对象。之后,程序应再次显示 公共变量及其值,并允许用户选择 方法等等。使用下面的类来测试您的 实施: public class Counter { public int c;

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

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

public class Counter {
    public int c;
    public void increment() { c++; }
    public void decrement() { c--; }
    public void reset() { c = 0; }
}
我遇到的问题与以下句子有关:“未指定参数的公共方法列表”。有没有办法只列出没有参数的方法?我曾经使用过getMethods,但最终我从对象和类超类中获得了很多方法,这些方法都带有参数

Returns:
    the parameter types for the method this object represents
例如,我编写的以下代码:

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();
        }
    }
}
产出如下:

你想上什么课?计数器
公共整数计数器.c
公共无效计数器。重置()
公共无效计数器。增量()
公共无效计数器。减量()
public final native void java.lang.Object.wait(long)抛出java.lang.InterruptedException
public final void 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)
public java.lang.String java.lang.Object.toString()
公共本机int java.lang.Object.hashCode()
公共最终本机java.lang.Class java.lang.Object.getClass()
公共最终本机void java.lang.Object.notify()
public final native void java.lang.Object.notifyAll()


有没有办法只打印那些没有参数的?我对任务细节的解释是否正确?或者短语“不指定参数的公共方法”可能意味着其他什么,而我的想法完全是错误的吗?

您看过该方法类的API了吗?有一个名为的方法,它可以回答您要查找的内容,并且API明确说明如果没有参数,它将返回什么。只要在返回的方法上的for循环中调用它,您就应该像flint一样使用。

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

getParameterTypes

公共类[]getParameterTypes()

此方法是一个对象。如果基础 方法不接受任何参数

Returns:
    the parameter types for the method this object represents

这是一个RTFM作业。这是手册-。顺便说一下,你对作业的解释是正确的。