亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

object is not an instance of declaring class解決辦法

標簽:
Java

背景

在java中使用反射,将DataFromImp类的属性值赋值给DataToImp类的同名属性。代码示例如下,运行时会报错:

object is not an instance of declaring class

分析

网上的分析一般都是说调用参数类(dataTo)未实例化,但非此场景,解决不了问题。

method.invoke(dataTo, value);

经过分析,发现此报错是由于赋值接收类(DataTo)类型声明错误引起的。DataTo类与DataToImp类都实现了DataInterFace接口,是两个实现类。如果实例化的dataTo与classTo接口相同,甚至实现代码也完全相同,也都会引起此错误。

解决

将 Class clazzTo = DataTo.class; 改为 Class clazzTo = DataToImp.class;


//声赋值发起类DataInterFace dataFrom = new DataFromImp().setValueRandom();//声明赋值接收类DataInterFace dataTo = new DataToImp();//声明发起类类型Class clazzFrom = DataFromImp.class//获取发起类字段数组Field[] fieldFromArray = clazzFrom.getDeclaredFields();//制作发起类属性map,结构为:Map<fieldName,filedValue>Map<String,Integer> fieldNameFromMap = new HashMap<String,Integer>();for(int i=0;i<fieldFromArray.length;i++){
    fieldNameFromMap.put(fieldFromArray[i].getName(), i) ;
}//声明接收类类型Class clazzTo = DataTo.class;//获取接收类字段数组Field[] fieldToArray = clazzTo.getDeclaredFields();//获取接收类第三个属性的字段名String filedTo = fieldToArray[2].getName()//获取接收类属性的类型描述PropertyDescriptor pd = new PropertyDescriptor(filedTo, clazzTo);//获取发起类的属性值Object value = fieldFromArray[fieldNameFromMap.get(filedTo)].get(dataFrom);//将发起类属性值赋值给接收类属性Method wM = pd.getWriteMethod();
wM.invoke(dataTo, value);



作者:张文健
链接:https://www.jianshu.com/p/77ee1e898386


點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消