gpt4 book ai didi

java - 使用反射调用方法时,最后一个变量参数不是可选的

转载 作者:行者123 更新时间:2023-11-30 04:30:07 24 4
gpt4 key购买 nike

我正在尝试使用反射调用方法

Method mi = TestInterface.class.getMethod("TestMethod", java.lang.String.class,java.lang.String.class,java.lang.String.class,java.lang.Object[].class);

该方法有 3 个强制字符串参数,最后一个参数(即变量参数)是可选的。

但是,当我如下调用此方法时。

mi.invoke(new TestImplementation(), new Object[]{"arg1", "arg2","arg3"});

然后它给了我一个错误java.lang.IllegalArgumentException:参数数量错误

但是最后一个参数应该是可选的,对吧?或者这在使用反射调用方法的情况下不起作用??

代码:

public interface TestInterface {
public void TestMethod(String str, String str1, String str2, Object... objects);
}

public class TestImplementation implements TestInterface {
public void TestMethod(String str1, String str2, String str3, Object... objects) {
// ....
}
}

public static void main(String[] args) throws Exception {
// works perfectly
TestInterface obj = new TestImplementation();
obj.TestMethod("str", "str1", "str2");
// doesn't work
Method mi = TestInterface.class.getMethod("TestMethod", java.lang.String.class, java.lang.String.class,
java.lang.String.class);
mi.invoke(new TestImplementation(), new Object[] { "arg1", "arg2", "arg3" });
}

提前致谢

最佳答案

Java 中不存在可选参数。您只能覆盖方法或使用varargs .

就您的情况而言 varargs您是显式请求方法对象,参数为:String、String、String、Object[]

因此您必须调用具有相同参数的方法:

mi.invoke(new TestImplementation(), new Object[]{"arg1", "arg2","arg3", new Object[0]);

要以一般方式了解您的问题,请参阅 this topic .

关于java - 使用反射调用方法时,最后一个变量参数不是可选的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14830136/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com