2016-04-06 28 views
3

Bu dinamik bir yöntemi çağırmak için benim kodudur:java.lang.IllegalArgumentException: string dizisinde argüman türü uyuşmazlığı

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 bir dize dizidir ve bu benim level1ClassSimilarityForUser yöntemin beyanıdır

public ResultSet level1ClassSimilarityForUser(String[] userURI) { 

alıyorum bu hata:

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) 

cevap

5

invoke, bir Object[] ikinci argüman olarak bekler (varargs sadece bir kolaylık sözdizimi). Ben sizin durumunuzda String[] ilk vararg argümanı olarak değil, tüm vararg Object[] olarak alınmaz ve böylece tek dizeleriniz String[] eşleşmeyen argümanlar olarak kullanılır.
Sizin durumunuzda, parametrelerinizi Object dizisine invoke vermeden önce açıkça sarmak gerekir.

yerine results = (ResultSet) method.invoke(new TestRecommendations(), new Ojbect[] { parameters }) yapın
İlgili konular