簡體   English   中英

為什么在使用帶有 Java 反射的 get 時出現“無法將 int 字段設置為 hashmap”錯誤?

[英]Why am I getting a "Cannot set int field to hashmap" error while using get with java reflection?

我正在嘗試使用 Apache POI 和 java 反射將一些 java 對象導出到 Excel 電子表格。 我已經實現了一個 ExcelWriter 類,它采用 T 類型的對象列表並將它們的值存儲到電子表格中。 它適用於幾種不同的類型,但我收到此“無法將 int 字段設置為 hashmap”錯誤消息,該消息指向一個 get 方法,而且我從未在此類中使用過 set 方法。

這是這個類的代碼。

class ExcelWriter<T>{

    private List<T> objList;

    private Field[] fields;

    private Class<T> objClass;

    public ExcelWriter(List<T> objList, Class<T> typeParam) {
        this.objList = objList;
        this.objClass = typeParam;
        this.fields = objClass.getDeclaredFields();
    }

    public void writeXlsToOutputStream(OutputStream responseOutputStream) throws Exception {
        //some code
        fields[i].setAccessible(true);
        row.createCell(i).setCellValue(fields[i].get(obj).toString()); // the error msg points to this line
        //some code
    }

}

下面是我試圖導出的數據對象類:

//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的配置問題,我在BadDetailDO的結果類型設置為“map”,導致mybatis在HashMap返回查詢結果。 我將結果類型更改為BadDetailDO的限定名稱,問題消失了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM