gpt4 book ai didi

java - 如何使用可变参数和反射

转载 作者:IT老高 更新时间:2023-10-28 20:25:36 25 4
gpt4 key购买 nike

简单的问题,如何使这段代码工作?

public class T {

public static void main(String[] args) throws Exception {
new T().m();
}

public // as mentioned by Bozho
void foo(String... s) {
System.err.println(s[0]);
}

void m() throws Exception {
String[] a = new String[]{"hello", "kitty"};
System.err.println(a.getClass());
Method m = getClass().getMethod("foo", a.getClass());
m.invoke(this, (Object[]) a);
}
}

输出:

class [Ljava.lang.String;
Exception in thread "main" java.lang.IllegalArgumentException: wrong number of arguments
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)

最佳答案

Test.class.getDeclaredMethod("foo", String[].class);

有效。问题是 getMethod(..) 只搜索 public 方法。来自 javadoc:

Returns a Method object that reflects the specified public member method of the class or interface represented by this Class object.

更新:成功获取方法后,可以使用:

m.invoke(this, new Object[] {new String[] {"a", "s", "d"}});

即 - 创建一个新的 Object 数组,其中包含一个元素 - String 数组。使用您的变量名称,它看起来像:

m.invoke(this, new Object[] {a});

关于java - 如何使用可变参数和反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2600854/

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