java反射invoke空指针_【Java】Java 反射 object is not an instance of declaring cla
【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相關教程
總結
以上是生活随笔為你收集整理的java反射invoke空指针_【Java】Java 反射 object is not an instance of declaring cla的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 注销邮储银行信用卡后还能重新申请吗 销卡
- 下一篇: java文件拷贝时 buff给多大合适_