應用場景:scala那邊做數據處理,java這邊接收返回數據做邏輯處理。現在scala那邊需要將得到的數據封裝到一個List裏面,在java那邊創建一個對應Object的javabean,接收傳回來的List模型,進行解析處理。
先上javabean:
package javabean;
import java.util.ArrayList;
import java.util.List;
import com.github.katjahahn.parser.sections.idata.NameImport;
import com.github.katjahahn.parser.sections.idata.OrdinalImport;
public class ImportInfo {
private String importDLLName;
private List<String> importFunNameList;
public ImportInfo() {
super();
}
public ImportInfo(String importDLLName, List<String> importFunNameList) {
super();
this.importDLLName = importDLLName;
this.importFunNameList = importFunNameList;
}
public String getImportDLLName() {
return importDLLName;
}
public void setImportDLLName(String importDLLName) {
this.importDLLName = importDLLName;
}
public List<String> getImportFunNameList() {
return importFunNameList;
}
public void setImportFunNameList(List<String> importFunNameList) {
this.importFunNameList = importFunNameList;
}
}
再上scala的數據封裝類:
def importsModel: java.util.List[ImportInfo] = {
val importDLLList = ListBuffer[ImportInfo]().asJava
val loader = new SectionLoader(data)
val maybeImports = loader.maybeLoadImportSection()
if (maybeImports.isPresent && !maybeImports.get.isEmpty) {
val idata = maybeImports.get
val imports = idata.getImports.asScala
for (im <- imports) {
val ImportInfo = new ImportInfo()
ImportInfo.setImportDLLName(im.getName)
val importFunNameList = ListBuffer[String]().asJava
val importsDllFun = im.getNameImports.asScala
// importFunNameList.clear()
for (ni <- importsDllFun) {
importFunNameList.add(ni.getName)
}
ImportInfo.setImportFunNameList(importFunNameList)
importDLLList.add(ImportInfo)
}
} else ""
importDLLList
}
這樣就實現了scala返回List<Object>給java。本例是改項目需要參考一個開源項目,這個開源項目裏面穿插着用了scala和java,我對scala不熟悉,也並不知道爲何不全在java裏面做,而是要穿插着scala,所以在實現一個scala返回List<Object>給java也折騰了半天。另外,在折騰過程中遇到幾點問題,我先記下來,如果有哪位大神知道,懇請執教:
Q2.爲何要scala和java穿插用,是scala處理數據能力比java更佳嗎?
Q1.通常有碰到兩層循環需要其中一個List在內存循環完做一次清空的情況,java裏面的List有clear()方法,但我在scala裏面採用的ListBuffer[ImportInfo]().asJava,在clear以後就把所有之前存的也一併清空了,我換成List[ImportInfo]().asJava又拋出不支持的數據處理異常,最後不得已採用循環裏面實例化ListBuffer,不知道是否有更優方法?