object is not an instance of declaring class解决办法

背景

在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
Map fieldNameFromMap = new HashMap();
for(int i=0;i

你可能感兴趣的:(object is not an instance of declaring class解决办法)