gpt4 book ai didi

java - 使用 Java Reflections 调用 invoke 方法时出现 IllegalArgumentException

转载 作者:搜寻专家 更新时间:2023-11-01 01:14:29 24 4
gpt4 key购买 nike

我有一个类有如下方法:-

public void setCurrencyCode(List<String> newCurrencycode){
this.currencycode = newCurrencycode;
}

我正在使用 Java Relections 调用此方法,如下所示:-

try {
List<String> value = new ArrayList<String>();
value.add("GB");

Class<?> clazz = Class.forName( "com.xxx.Currency" );
Object obj = clazz.newInstance();
Class param[] = { List.class };
Method method = obj.getClass().getDeclaredMethod( "setCurrencyCode", param );
method.invoke( value );
} catch(Exception e) {
System.out.println( "Exception : " + e.getMessage() );
}

但是,“invoke”调用会引发异常:- java.lang.IllegalArgumentException: 对象不是声明类的实例

有什么想法吗?

谢谢

莎拉

最佳答案

您没有调用 invoke()正确:invoke() 期望目标对象作为第一个参数,然后方法调用的参数作为以下参数(自 java 1.5 起,它是可变参数)

试试这个:

try 
{
List<String> value = new ArrayList<String>();
value.add("GB");

Class<?> clazz = Class.forName( "com.xxx.Currency" );
Object obj = clazz.newInstance();
// Since java 1.5, you don't need Class[] for params: it's a varargs now
Method method = clazz.getDeclaredMethod( "setCurrencyCode", List.class ); // you already have a reference to the class - no need for obj.getClass()
method.invoke( obj, value ); // invoke expects the target object, then the parameters
}
catch(Exception e)
{
System.out.println( "Exception : " + e.getMessage() );
}
}

关于java - 使用 Java Reflections 调用 invoke 方法时出现 IllegalArgumentException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6680787/

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