草庐IT

Optional

全部标签

java - Guava 的 Optional 类有什么意义

我最近读到了这个并且看到有人在使用这个类,但在几乎所有情况下,使用null会同样有效——如果不是更直观的话。有人可以提供一个具体的例子,其中Optional可以实现null无法或以更简洁的方式实现的目标吗?我唯一能想到的是将它与不接受null键的Maps一起使用,但即使这样也可以通过null值的侧面“映射”来完成.谁能给我一个更有说服力的论据? 最佳答案 Guava团队成员在这里。null的一个最大缺点可能是它在任何给定上下文中的含义并不明显:它没有说明性的名称。null表示“此参数没有值”并不总是很明显-哎呀,作为返回值,有时它表

java - JPA 中的 @Basic(optional = false) 与 @Column(nullable = false)

@Basic(optional=false)和@Column(nullable=false)在JPA持久化中有什么区别? 最佳答案 GordonYorke(EclipseLink架构委员会成员、TopLink核心技术主管、JPA2.0专家组成员)就这个话题写了一个很好的答案,所以我不会转述他,而是引用hisanswer:Thedifferencebetweenoptionalandnullableisthescopeatwhichtheyareevaluated.Thedefinitionof'optional'talksabout

java - java.util.Optional为什么不是Serializable,如何用这样的字段序列化对象

Enum类是可序列化的,所以用枚举序列化对象没有问题。另一种情况是类具有java.util.Optional类的字段。在这种情况下会抛出以下异常:java.io.NotSerializableException:java.util.Optional如何处理这样的类,如何序列化它们?是否可以将此类对象发送到远程EJB或通过RMI?这是一个例子:importjava.io.ByteArrayOutputStream;importjava.io.IOException;importjava.io.ObjectOutputStream;importjava.io.Serializable;im

java - Optional.flatMap 和 Optional.map 有什么区别?

这两种方法有什么区别:Optional.flatMap()和Optional.map()?一个例子将不胜感激。 最佳答案 如果函数返回您需要的对象,则使用map;如果函数返回Optional,则使用flatMap。例如:publicstaticvoidmain(String[]args){Optionals=Optional.of("input");System.out.println(s.map(Test::getOutput));System.out.println(s.flatMap(Test::getOutputOpt));

java - `Optional.orElse()` 和 `Optional.orElseGet()` 之间的区别

我试图了解Optional.orElse()之间的区别和Optional.orElseGet()方法。orElse()的描述方法是“如果存在则返回值,否则返回其他值。”同时,orElseGet()的描述方法是“如果存在则返回值,否则调用其他值并返回该调用的结果。”orElseGet()方法采用Supplier功能接口(interface),该接口(interface)本质上不带任何参数并返回T.在什么情况下需要使用orElseGet()?如果你有方法TmyDefault()你为什么不直接做optional.orElse(myDefault())而不是optional.orElseGet

java - 将 Java 8 的 Optional 与 Stream::flatMap 一起使用

新的Java8流框架和friend们编写了一些非常简洁的Java代码,但我遇到了一个看似简单但很难简洁地做到的情况。考虑一个Listthings和方法Optionalresolve(Thingthing)。我想将Thing映射到Optional并获取第一个Other。显而易见的解决方案是使用things.stream().flatMap(this::resolve).findFirst(),但flatMap要求您返回一个流,并且Optional没有stream()方法(或者它是Collection或提供将其转换为或查看为Collection的方法)。我能想到的最好的是:things.s

c++ - 为什么 std::optional<int> 的构造比 std::pair<int, bool> 更昂贵?

考虑这两种可以表示“可选int”的方法:usingstd_optional_int=std::optional;usingmy_optional_int=std::pair;鉴于这两个功能...autoget_std_optional_int()->std_optional_int{return{42};}autoget_my_optional()->my_optional_int{return{42,true};}...g++trunk和clang++trunk(带有-std=c++17-Ofast-fno-exceptions-fno-rtti)生成以下程序集:get_std_op

c++ - 应该如何使用 std::optional ?

我正在阅读std::experimental::optional的文档我对它的作用有一个很好的了解,但我不明白何时我应该使用它或应该如何使用它。该站点尚未包含任何示例,这使我更难掌握该对象的真实概念。std::optional何时是一个好的选择,以及它如何弥补以前标准(C++11)中没有的内容。 最佳答案 我能想到的最简单的例子:std::optionaltry_parse_int(std::strings){//trytoparseanintfromthegivenstring,//andreturn"nothing"ifyouf

java - Java 8 的 Optional.ifPresent 和 if-not-Present 的功能风格?

在Java8中,如果Optional对象存在,我想对它做一些事情,如果它不存在,我想做另一件事。if(opt.isPresent()){System.out.println("found");}else{System.out.println("Notfound");}不过,这不是“功能风格”。Optional有一个ifPresent()方法,但我无法链接orElse()方法。因此,我不能写:opt.ifPresent(x->System.out.println("found"+x)).orElse(System.out.println("NOTFOUND"));回复@assylias,

java - 为什么不应该在参数中使用 Java 8 的 Optional

我在许多网站上阅读过Optional应该只用作返回类型,而不是在方法参数中使用。我正在努力寻找一个合乎逻辑的原因。例如,我有一段逻辑,它有2个可选参数。因此,我认为这样编写我的方法签名是有意义的(解决方案1):publicintcalculateSomething(Optionalp1,Optionalp2{//mylogic}许多网页指定Optional不应用作方法参数。考虑到这一点,我可以使用以下方法签名并添加明确的Javadoc注释以指定参数可能为空,希望future的维护人员会阅读Javadoc,因此在使用参数之前始终执行空检查(解决方案2):publicintcalculat