簡體   English   中英

Apache Poi 最佳方式

[英]Apache Poi best way

嗨,上次我想知道 Apche Poi 保存對象的好方法。

方式一

List<Something> list = ....;
cell.setValue(obj.getName) etc

方式 2 將列表轉換為對象[]

for(int i=0; i<objectsToSave.size;i++){
 for(int y=0; y<object.size;y++){
  if(obj instance of Integer)
   cell.setValue((Integer) obj[i]
  if(obj instance of RichTextString)
   cell.setValue((RichTextString) obj[i]
 }
}

在一種方式中,我沒有 if,但是如果我們想保存另一個對象,我們必須創建新的“轉換器”。

In 2 way是“通用的”,但我可以有很多if。 (我認為這是不好的做法)

你有什么想法/好的方法嗎?

真的沒有一個很好的方法來做到這一點。 您可以嘗試避免重復類型檢查的一件事是創建一個 setter 映射,如下所示:


private static Map<Class<?>,BiConsumer<Cell,Object>> typeMap = new HashMap<Class<?>, BiConsumer<Cell,Object>>();

static {
   typeMap.put(Integer.class, obj -> cell.setValue((Integer)obj);
   typeMap.put(String.class, obj -> cell.setValue((RichTextString)obj);
//....and so on
}

public void setCell(Cell cell, Object obj) {
   typeMap.get(obj.getClass()).apply(cell, obj);
}

那么你的代碼將變成:

for(int i=0; i<objectsToSave.size;i++){
 for(int y=0; y<object.size;y++){
  setCell(cell, object);
 }
}

這具有避免instanceof重復 RTTI 的優點,但它可能很危險,特別是您必須小心地徹底檢查每個類,否則會引發異常。

不過,它仍然不是很好。 您所做的基本上就是移動條件。

暫無
暫無

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

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