【问题标题】:How to pass an array instead of variable arguments in java?如何在java中传递数组而不是变量参数?
【发布时间】:2018-02-12 13:19:01
【问题描述】:

我想将数组而不是变量参数传递给 java 方法。在类似的问题中,人们回答说数组与椭圆没有什么不同,所以它必须有效。但这对我不起作用。 这是我的代码:

String[] parameters = text.split("[?]");
Object[] params = Arrays.asList(parameters).toArray(new Object[parameters.length]);
params[0] = myObject;
method.invoke(params)

text 类似于:myMethod?param1?param2 ... 但如果方法没有参数,它也可以类似于myMethod

java.lang.IllegalArgumentException:参数数量错误 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:497)

我该怎么办?

已编辑

我查过了,变量参数的值是{myMethod, param1, param2}。

【问题讨论】:

  • 是什么让你觉得有区别?您是否尝试过仅使用“?”进行拆分,[ 和 ] 在那里做什么?
  • 数组与省略号没有什么不同你是什么意思?
  • 用椭圆表示要传递给方法的参数数量可变。
  • 所以你的方法使用可变参数?像“public void myMethod(Object... arguments)?
  • 没有。不是我的方法。内置的“调用”方法。

标签: java arrays reflection arguments parameter-passing


【解决方案1】:

你需要在拆分时转义?,下面应该将字符串拆分成数组,你可以传递给方法:

String s = "myMethod?param1?param2";
String[] tokens = s.split("\\?");
System.out.println(Arrays.toString(tokens));

【讨论】:

  • split("?") 应该也可以。如果仅将单个字符作为参数传递,则使用该字符而不是将术语视为正则表达式。
  • @Lothar 刚试过,不行。它抛出 PatternSyntaxException 和消息 Dangling meta character '?' near index 0
  • @Darshan 我再次检查了。你是对的,我记错了String#split 中的 if 语句(几周前在源中为自己回答了另一个问题)
  • 反正对我来说结果是一样的!实际上,当我输入“?”时它在 intellij 中有一条红色下划线。 [?] 是正则表达式。@DarshanMehta
  • 是的,它是正则表达式。如果您尝试我上面提供的代码 sn-p,它会正常工作
【解决方案2】:

“myObject”和“method”的类型是什么?

invoke 方法应具有如下签名 returntype invoke(Object...o)//Object 因为 params 是 Array Of Objects { }

【讨论】:

  • 方法是一个获取字符串并返回它的setter。
  • 参数[0] = myObject; method.invoke(params) 你能详细说明一下吗
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-09
  • 1970-01-01
  • 1970-01-01
  • 2010-10-19
  • 1970-01-01
  • 2012-02-10
相关资源
最近更新 更多