首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Spring集成注释Java 8可选的不正确处理

Spring集成注释Java 8可选的不正确处理
EN

Stack Overflow用户
提问于 2015-03-04 21:22:19
回答 1查看 506关注 0票数 3

我使用Spring 1.2.2.释放和Java8,问题是Spring将Optional payload封装到新的可选对象中的次数与我通过transformer/service activator传递它的次数一样多。例如。

代码语言:javascript
运行
复制
@ServiceActivator(inputChannel = ..., outputChannel = ...) 
public Optional<Foo> transform() {returns -> Optional.of(foo);}

@ServiceActivator(inputChannel = ..., outputChannel = ...)
public Optional<Foo> doSomething1(Optional<Foo> payload) {
     payload.ifPresent(f -> {System.out.println(f.getId());}); // this line throws ClassCastException 
  return foo;
}

上面的代码抛出ClassCastExcpetion的原因(不能将java.util.Optional转换为Foo),因为payload而不是包含foo作为值包含另一个可选对象,而该可选对象包含foo作为值。

我读过上面提到的

现在Spring一致地处理Java 8的可选类型。

我甚至尝试使用文档中提到的框架的确切版本,但没有成功。

解决方案:我尝试创建包含有效负载的包装器(PayloadWrapper)对象,并且它可以工作。但也许还有别的办法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-04 21:35:58

我想文件还不清楚。问题是spring可以将方法参数转换为Optional<Type>,但在本例中,您的参数已经是Optional,所以Spring再次包装它。

如果使转换方法只返回Foo (没有Optional),那么当Optional传递给ServiceActivator时,Spring将在Optional中包装Foo实例(或'null')

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28865232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档