【Java】Java 反射 object is not an instance of declaring cla
【Java】Java 反射 object is not an instance of declaring class
1.背景
我想用Java反射出一个类的方法,并且传参执行
public class MetricInFields implements Serializable {
public RowTypeInfo getRowFields(SqlSessionFactory sqlSessionFactory, String dicName){
RowTypeInfo rowTypeInfo = new RowTypeInfo();
return rowTypeInfo;
}
}
测试代码如下
Class> clazz = Class.forName(className);
Method method = clazz.getMethod("getRowFields", SqlSessionFactory.class, String.class);
rowTypeInfo = (RowTypeInfo) method.invoke(null,factory,dicName);
但是报错空指针异常,然后我随便在invoke第一个参数传递的的时候,传入当前类报错
Caused by: java.lang.IllegalArgumentException: object is not an instance of declaring class
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:498)
后来发现,当反射静态方法的时候,直接传入Null就可以了,但是如果不是静态了,如下
public class MetricInFields implements Serializable {
public static RowTypeInfo getRowFields(SqlSessionFactory sqlSessionFactory, String dicName){
RowTypeInfo rowTypeInfo = new RowTypeInfo();
return rowTypeInfo;
}
}
如果不是静态类,如下
public class MetricInFields implements Serializable {
public RowTypeInfo getRowFields(SqlSessionFactory sqlSessionFactory, String dicName){
RowTypeInfo rowTypeInfo = new RowTypeInfo();
return rowTypeInfo;
}
}
那么可以这样
Class> clazz = Class.forName(className);
Object obj = clazz.newInstance();
Method method = clazz.getMethod("getRowFields", SqlSessionFactory.class, String.class);
rowTypeInfo = (RowTypeInfo) method.invoke(null,factory,dicName);
【Java】Java 反射 object is not an instance of declaring cla相关教程