为什么我会得到一个“a”;无法将int字段设置为hashmap";使用get with java反射时出错?

为什么我会得到一个“a”;无法将int字段设置为hashmap";使用get with java反射时出错?,java,reflection,apache-poi,Java,Reflection,Apache Poi,我正在尝试使用ApachePOI和java反射将一些java对象导出到Excel电子表格。我实现了一个ExcelWriter类,它获取T类型的对象列表,并将其值存储到电子表格中。它使用了两种不同的类型,但我收到了“Cannotsetint-fieldtohashmap”错误消息,它指向一个get方法,我在这个类中从未使用过set方法 下面是这个类的代码 类ExcelWriter{ 私有列表对象列表; 私有字段[]字段; 私有类对象类; 公共ExcelWriter(列表对象列表,类typePara

我正在尝试使用ApachePOI和java反射将一些java对象导出到Excel电子表格。我实现了一个ExcelWriter类,它获取T类型的对象列表,并将其值存储到电子表格中。它使用了两种不同的类型,但我收到了“Cannotsetint-fieldtohashmap”错误消息,它指向一个get方法,我在这个类中从未使用过set方法

下面是这个类的代码

类ExcelWriter{
私有列表对象列表;
私有字段[]字段;
私有类对象类;
公共ExcelWriter(列表对象列表,类typeParam){
this.objList=objList;
this.objClass=typeParam;
this.fields=objClass.getDeclaredFields();
}
public void writeXlsToOutputStream(OutputStream responseOutputStream)引发异常{
//一些代码
字段[i].setAccessible(true);
row.createCell(i).setCellValue(字段[i].get(obj).toString());//错误消息指向此行
//一些代码
}
}
下面是我尝试导出的数据对象类:

//I am also using lombok and mybatis in this class, hence the annotations
@Data
@TableName("bad_detail")
class BadDetailDO{
    @TableId
    private int id;
    //more private fields
}
以及错误消息:

java.lang.IllegalArgumentException: Can not set int field com.csdt.mi.data.ifir.domain.BadDetailDO.id to java.util.HashMap
    at java.base/jdk.internal.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167)
    at java.base/jdk.internal.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171)
    at java.base/jdk.internal.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:58)
    at java.base/jdk.internal.reflect.UnsafeIntegerFieldAccessorImpl.getInt(UnsafeIntegerFieldAccessorImpl.java:56)
    at java.base/jdk.internal.reflect.UnsafeIntegerFieldAccessorImpl.get(UnsafeIntegerFieldAccessorImpl.java:36)
    at java.base/java.lang.reflect.Field.get(Field.java:418)
    at com.csdt.mi.quality.utils.ExcelWriter.writeXlsToOutputStream(ExcelWriter.java:64)
    ...

关于这是什么原因的任何想法?

事实证明这是一个mybatis配置问题,我在Mapper.xml中将
BadDetailDO
的结果类型设置为“映射”,导致mybatis在
HashMap
中返回查询结果。我将结果类型更改为限定名称
baddaildo
,问题消失了。

字段[I].get(obj).toString()
中,您在哪里声明
obj
,更重要的是,在哪里设置值?我怀疑您会发现
obj
是对
HashMap
的引用(是的,错误消息说'set',但它们对set和get都使用一个消息生成器)。@JimGarrison
obj
是在通过
objList
迭代的foreach循环中声明的;mybatis在查询数据库时会自动设置
BadDetailDO
中字段的值。@JimGarrison原来
obj
是对HashMap,lol的引用。我假设这是因为泛型类型是使用HashMap实现的。但是我的另一门课却没有这个问题。