2016-04-06 37 views
3

にこれは、動的にメソッドを呼び出すための私のコードです:java.lang.IllegalArgumentExceptionが:引数の型の不一致文字列配列

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) 

答えて

5

invokeは、第2引数としてObject[]を想定しています(varargsは単なる便利な構文です)。 あなたの場合、String[]は最初のvararg引数ではありませんが、完全なvararg Object[]とみなされ、したがって、あなたの単一の文字列は、String[]と一致しない引数として使用されると思います。
配列にパラメータを明示的にラップしてからinvokeに渡すと効果があります。
results = (ResultSet) method.invoke(new TestRecommendations(), new Ojbect[] { parameters })の代わりに

関連する問題