当前位置: 首页 > 面试题库 >

java.lang.IllegalArgumentException:字符串数组上的参数类型不匹配

司徒高寒
2023-03-14
问题内容

这是我的代码,用于动态调用方法:

String[] parameters = new String[requiredParameters.length];
//here i put some values in the parameters array
method = TestRecommendations.class.getMethod("level1ClassSimilarityForUser",
                                    String[].class);
System.out.println(":" + parameters[0] + ":");
results = (ResultSet) method.invoke(new TestRecommendations(), parameters)

parameters是一个字符串数组,这是我level1ClassSimilarityForUser方法的声明

public ResultSet level1ClassSimilarityForUser(String[] userURI) {

我收到此错误:

java.lang.IllegalArgumentException: argument type mismatch

    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)

问题答案:

invoke期望Object[]作为第二个参数(varargs只是一种方便的语法)。我认为在您的情况下,String[]不会将其作为第一个vararg参数,而是将完整的vararg
Object[]以及因此您的单个字符串用作不匹配的参数String[]
在您的情况下,将参数显式地包装在Object数组中,然后再提供给它即可invoke
所以,做results = (ResultSet) method.invoke(new TestRecommendations(), new Ojbect[] { parameters })代替




 类似资料:
  • 在游戏实体中我有: 我得到这个错误: 游戏实体:

  • 问题内容: 我目前正在使用MYSQL中的函数,我有另一个表中的逗号分隔字符串(1,22,344,55),如何在MYSQL中将其拆分为数组(不是temp_table)。另外,MYSQL中有类似的函数可以执行foreach()吗? 问题答案: MySQL不包含拆分定界字符串的函数。但是,创建自己的函数非常容易。 用法 从这里:http : //blog.fedecarg.com/2009/02/22/

  • 反正有这样做的吗?

  • 我想消除此示例代码中的类型擦除警告: 它编译和工作正常,但有一个警告: 警告:(31,13)类型模式Seq[Int](Seq[Int]的底层)中的非变量类型参数Int未选中,因为它被擦除情况b消除:Seq[Int]= 在这种情况下,你有什么简单的解决方案来避免擦除吗? 到目前为止,我尝试了什么(根据这一点): 但是它不能编译,因为c现在是Any类型。 我相信这个问题有几种解决方法。我会接受最简单的

  • 问题内容: 我第一次使用JavaFx,遇到事件问题。我用SceneBuilder构建了一个表单,并在.fxml和controller上添加了一个事件,但始终返回: FirstScene.fxml: FirstSceneController.java: JavaFxApplication.java: 例外: 我将非常感谢您的帮助。 问题答案: 使用,而不是。