Java 为什么不是';有没有可选的.or(可选默认)方法?
有没有办法使下面的代码示例更简洁Java 为什么不是';有没有可选的.or(可选默认)方法?,java,guava,optional,Java,Guava,Optional,有没有办法使下面的代码示例更简洁 final FluentIterable<AuthContext> withEmails = // ... final Optional<AuthContext> verified = withEmails.firstMatch(VERIFIED_EMAIL); if (verified.isPresent()) { return verified.get(); } return withEmai
final FluentIterable<AuthContext> withEmails = // ...
final Optional<AuthContext> verified = withEmails.firstMatch(VERIFIED_EMAIL);
if (verified.isPresent()) {
return verified.get();
}
return withEmails.first().orNull();
final fluentitrable
或者返回verified.or(使用emails.first().orNull())
将在orNull()
方法返回null时失败。只需执行verified.or(使用emails.first()).orNull()代码>
根据方法的返回类型和您选择的IDE,类型推断可能不建议这样做,因为它返回的是另一个类型为T的可选,而不是T本身
c、 f.只需执行验证。或(使用email.first()).orNull()代码>
根据方法的返回类型和您选择的IDE,类型推断可能不建议这样做,因为它返回的是另一个类型为T的可选,而不是T本身
c、 f.它的标签是番石榴
,所以我引用了那些文档——虽然我也看到with emails
是一个具体的列表,而不是可选的AuthContext,所以这实际上是不正确的。是的,我也看到了这一点,因为该方法在接口中明显存在,但在Java 8版本中缺失。好的,我检查了fluenterable
的Javadocs,并且first()
确实返回了一个可选的
——所以我现在保留我的答案,除非OP可以澄清为什么或方法对他们不起作用(旧库?@LeonardBrünings FYI,他们重新命名了大多数可选方法——在JDK8yes中是orElse
,但是它只接受T
,而不接受Optional
,所以用Java8 Optional链接Optionals是不可能的。它被标记为guava
,所以我引用了那些文档——虽然我也看到with email
是一个具体的列表,而不是可选的authContext,所以这实际上是不正确的。是的,我也看到了这一点,因为该方法在接口中明显存在,但在Java 8版本中缺失。好的,我检查了fluenterable
的Javadocs,并且first()
确实返回了一个可选的
——所以我现在保留我的答案,除非OP可以澄清为什么或方法对他们不起作用(旧库?@LeonardBrünings FYI,他们重命名了大多数可选方法——在JDK8yes中是orElse
,但是它只接受T
,而不接受Optional
,所以用Java8 Optional链接可选方法是不可能的。