簡體   English   中英

使用Java 8構造時Bean創建的ArrayOutOfBoundsException

[英]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.

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