使用Java 8构造时创建Bean时的ArrayOutOfBoundsException

使用Java 8构造时创建Bean时的ArrayOutOfBoundsException,java,spring,java-8,javabeans,indexoutofboundsexception,Java,Spring,Java 8,Javabeans,Indexoutofboundsexception,当我使用Java8特性时,我在服务启动(Bean创建)时获得了一个ArrayIndexOutOfBoundsException Java8已经建立并开始工作。代码编译正确。在服务启动时,由于未创建bean,服务无法侦听端口。当我更改代码(删除Java8构造)时,服务启动,一切正常 这是我正在使用的代码(服务启动的工作代码): 使用Java 8构造的相同代码: response.parallelStream() .filter(itemObject -> itemObject

当我使用Java8特性时,我在服务启动(Bean创建)时获得了一个
ArrayIndexOutOfBoundsException

Java8已经建立并开始工作。代码编译正确。在服务启动时,由于未创建bean,服务无法侦听端口。当我更改代码(删除Java8构造)时,服务启动,一切正常

这是我正在使用的代码(服务启动的工作代码):

使用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


我该如何解决这个问题

您使用哪个版本的Spring?您需要升级到Spring4才能使用Java8Lambda表达式。

我最近在使用Spring3.0.5时发现了一个bug,它似乎在4.0.5中得到了修复。详情如下


如果您有一个具有参数化构造函数的类,并且还有一个使用lambda表达式(在Java 8中引入)的方法,那么在为该类创建bean时会发生ArrayIndexOutOfException。

什么是
idList
?在第二个版本中,您使用的是
parallelStream
,因此您将从多个线程向该列表添加项目。您使用的列表实现是线程安全的吗?如果使用
stream()
而不是
parallelStream()
,错误是否会消失?此外,获取列表中流内容的正常方法是
list list=stream.collect(collector.toList())
而不是
stream.forEach(o->list.add(o)
。我并不是真的从多个线程添加。Java正在内部展开循环并并行化。使用steam时仍然存在错误。正如我所说,代码块应该在调用函数时执行,而不是在创建bean时执行。这个块是如何使用的,并在服务启动时提供ArrayIndexOutOfBounds的。请看m请回答下面的问题,并告诉我您是否认为这可能是一个原因是的,4.0.X.RELEASE使用java 8.4.0是不够的。它至少需要是4.0.4或更高版本。错误被描述为问题16341这不是一个真正的错误。Spring 3不完全支持java 8,因此将Lambdas与Spring 3.0.5一起使用是一个用户错误,而不是Spring错误。我只是遇到这种情况时,它看起来非常奇怪。正如你所说,当我向bean的构造函数添加一个参数时,发生了这种情况。我在几个地方使用了forEach。我认为我永远不会建立这样的联系,即类中任何地方的forEach都会用数组边界异常破坏其bean实例化。哦,好吧——谢谢,Stack Overflow!你让我摆脱了噩梦般的头痛!谢谢!我遇到了同样的问题,但情况有点不同。我的类没有任何参数化构造函数,但在一个函数中使用了lambda表达式。我尝试将spring升级到v4,但没有任何帮助。删除lambda表达式确实有效。这是一个奇怪的问题!有人能解释一下吗这到底是为什么?
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