从 Guava 到 Java 的可选转换
Optional conversion from Guava to Java
如何在不使用任何 if 语句的情况下将 Guava Optional 转换为 Java Optional?
if (maybeSomething.isPresent()) {
return java.util.Optional.of(maybeSomething.get())
} else {
return java.util.Optional.empty()
}
Optional javaOpt = Optional.ofNullable(guavaOpt.orNull());
怎么样?
使用 guava 转换
maybeSomething
.transform(java.util.Optional::of).or(java.util.Optional.empty());
这完全取决于您目前对 Guava 的 Optionals 的使用情况;第一个问题在于两者之间的差异。
其中:
- Guava的Optional是abstract,Java8是final;
- 番石榴上有的方法 Java 8 上没有,反之亦然。
这意味着你首先需要确定的是你对Guava的不同用法;这将决定您必须构建等效的 Java 8 的方式。
但考虑到两者 API 的差异,一些 if
似乎不可避免...
我个人的建议是一路走下去,用 Java 8 替换所有当前使用的 Guava;如果需要 "phaseout period",弃用必要的方法并在需要时提供它们,直到完全排除 Guava 的 Optional。
Guava Release 21 introduced the toJavaUtil
and fromJavaUtil
conversion methods to the Optional
class.
javaUtilOptional = Optional.toJavaUtil(guavaOptional);
guavaOptional = Optional.fromJavaUtil(javaUtilOptional);
在幕后,它似乎主要是按照 Kayaman 的回答中的建议实施的:
public java.util.Optional<T> toJavaUtil() {
return java.util.Optional.ofNullable(orNull());
}
...
public static <T> Optional<T> fromJavaUtil(@Nullable java.util.Optional<T> javaUtilOptional) {
return (javaUtilOptional == null) ? null : fromNullable(javaUtilOptional.orElse(null));
}
如何在不使用任何 if 语句的情况下将 Guava Optional 转换为 Java Optional?
if (maybeSomething.isPresent()) {
return java.util.Optional.of(maybeSomething.get())
} else {
return java.util.Optional.empty()
}
Optional javaOpt = Optional.ofNullable(guavaOpt.orNull());
怎么样?
使用 guava 转换
maybeSomething
.transform(java.util.Optional::of).or(java.util.Optional.empty());
这完全取决于您目前对 Guava 的 Optionals 的使用情况;第一个问题在于两者之间的差异。
其中:
- Guava的Optional是abstract,Java8是final;
- 番石榴上有的方法 Java 8 上没有,反之亦然。
这意味着你首先需要确定的是你对Guava的不同用法;这将决定您必须构建等效的 Java 8 的方式。
但考虑到两者 API 的差异,一些 if
似乎不可避免...
我个人的建议是一路走下去,用 Java 8 替换所有当前使用的 Guava;如果需要 "phaseout period",弃用必要的方法并在需要时提供它们,直到完全排除 Guava 的 Optional。
Guava Release 21 introduced the toJavaUtil
and fromJavaUtil
conversion methods to the Optional
class.
javaUtilOptional = Optional.toJavaUtil(guavaOptional);
guavaOptional = Optional.fromJavaUtil(javaUtilOptional);
在幕后,它似乎主要是按照 Kayaman 的回答中的建议实施的:
public java.util.Optional<T> toJavaUtil() {
return java.util.Optional.ofNullable(orNull());
}
...
public static <T> Optional<T> fromJavaUtil(@Nullable java.util.Optional<T> javaUtilOptional) {
return (javaUtilOptional == null) ? null : fromNullable(javaUtilOptional.orElse(null));
}