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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 您可以使用Java反射机制中的getDeclaredMethod()方法获取带有不定参数方法。该方法需要两个参数方法名称和参数类型。在参数类型中,您可以使用“...”来表示不定参数。例如,如果您要获取一个名为“myMethod”的方法,它有一个字符串参数和一个不定参数,则可以使用以下代码: Class<?> clazz = MyClass.class; Method method = clazz.getDeclaredMethod("myMethod", String.class, String[].class); 请注意,这里的“String[].class”表示一个字符串数组,它可以接受任意数量的字符串参数。 ### 回答2: 在JAVA中,使用反射获取带有不定参数方法可以通过以下步骤实现。 1. 首先,通过Class类的forName方法获取目标类的Class对象。例如,如果我们要获取名为"TestClass"的类的Class对象,可以使用以下代码: Class<?> clazz = Class.forName("TestClass"); 2. 然后,使用getMethod或getDeclaredMethod方法获取目标方法的Method对象。其中getMethod方法用于获取公共方法,getDeclaredMethod方法用于获取所有方法,包括私有方法。需要注意的是,方法名要与目标方法相匹配。如果目标方法是带有不定参数的,则需要在方法名后面加上三个点(...)来表示。例如,我们要获取名为"testMethod"的带有不定参数方法,可以使用以下代码: Method method = clazz.getMethod("testMethod", String[].class); 3. 最后,可以通过Method对象的invoke方法来调用目标方法。例如,如果我们要调用testMethod方法,可以使用以下代码: Object result = method.invoke(null, (Object) new String[]{"param1", "param2"}); 需要注意的是,invoke方法的第一个参数是调用方法的对象,如果目标方法是静态方法,则可以将该参数设置为null。之后的参数可以按照目标方法参数类型顺序传入。 总结来说,通过使用Class类的forName方法获取Class对象,再使用getMethod或getDeclaredMethod方法获取Method对象,最后使用invoke方法调用目标方法,就可以实现获取带有不定参数方法并进行调用。 ### 回答3: 在Java中,通过反射获取带有不定参数方法可以使用`getDeclaredMethod`方法。不定参数可以理解为方法参数个数是可变的。 首先,我们需要使用`Class`类的`getDeclaredMethod`方法。这个方法接受两个参数方法的名称和参数类型。在参数类型位置上,我们可以使用"..."表示不定参数。例如,如果要获取一个名为`methodName`且带有不定参数方法,可以使用以下代码: ```java Class<?> clazz = targetObject.getClass(); Method method = clazz.getDeclaredMethod("methodName", parameterTypes); ``` 其中,`targetObject`是调用该方法的对象,`parameterTypes`是一个数组,包含了方法参数类型。 在参数类型中,不定参数会被视为数组类型。例如,如果方法定义为`method(String... strs)`,则在参数类型中应该传入`String[].class`。 获取方法后,可以通过`method.invoke(targetObject, parameters)`来调用这个方法,其中`paramters`是一个包含实际参数值的数组。 需要注意的是,由于不定参数的特殊性,传入的实际参数值应该符合方法参数的个数和类型。如果传入的实际参数个数与不定参数个数不匹配,或者传入的参数类型与不定参数的元素类型不匹配,则会抛出`IllegalArgumentException`异常。 总结来说,通过反射获取带有不定参数方法,就是使用`getDeclaredMethod`方法,并在参数类型中使用`"..."`来表示不定参数的数组类型。获取方法后,可以使用`invoke`方法调用这个方法

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值