[英]ArrayOutOfBoundsException on Bean creation while using Java 8 constructs
當我使用Java 8功能時,我在服務啟動(Bean創建)上得到一個ArrayIndexOutOfBoundsException
。
Java 8已經建立並一直在運行。 代碼編譯正確。 在服務啟動時,服務無法偵聽端口,因為bean未創建。 當我更改代碼(刪除java 8構造)時,服務啟動,一切正常。
這是我正在使用的代碼(服務啟動的工作代碼):
for (Item itemObject : response) {
if (itemObject.hasId()) {
idList.add(String.valueOf(itemObject.Id());
}
}
使用Java 8構造的相同代碼:
response.parallelStream()
.filter(itemObject -> itemObject.hasId())
.map(itemObject -> itemObject.getId())
.forEach(id -> idList.add(id));
包含這段代碼的類的bean是使用組件掃描創建的。
當使用第二個代碼塊代替第一個代碼塊時,以下是異常消息:
Exiting with throwable: java.lang.IllegalArgumentException: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: URL [jar:file:/workspace/.../GetContainerIdForFcSkuAdapter.class]; nested exception is java.lang.ArrayIndexOutOfBoundsException: 51880
java.lang.IllegalArgumentException: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: URL [jar:file:/workspace....Some.class]; nested exception is java.lang.ArrayIndexOutOfBoundsException: 51880
對我來說沒有意義的是,為什么在創建bean時,函數內部的代碼(不是bean類的構造函數)被覆蓋。 我問這個,因為當我使用普通for循環而不是並行流時,異常不存在。 調用函數並實際使用此代碼時, ArrayOutOfBoundsException
出現ArrayOutOfBoundsException
。
我該如何解決?
你使用的是哪個版本的Spring? 您需要升級到Spring 4才能使用Java 8 lambda表達式。
我最近在使用Spring 3.0.5時發現了一個bug,它似乎在4.0.5中得到修復。 這是詳細信息。
如果你有一個具有參數化構造函數的類,並且還有一個使用lambda表達式的方法(在Java 8中引入),那么在為該類創建bean時會發生ArrayIndexOutOfException。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.