Java 空可选的类型是什么?
What is the type of a Java empty Optional?
所以我正在检查 Optional
Java class 我在 public static<T> Optional<T> empty()
文档中注意到了这一点:
@param <T> The type of the non-existent value*.
而且,在查看整个 class 并搜索此处和其他几页之后,我遇到了这个我无法回答的问题:
- 空
Optional
可以有特定类型吗?
1.1 如果可以,如何设置?
1.2 有什么方法可以检查它的类型吗?
无论您指定什么类型:
// Empty Optional with value type String
Optional<String> opt = Optional.empty();
这是 OpenJDK 11 中该方法的source code:
public static<T> Optional<T> empty() {
@SuppressWarnings("unchecked")
Optional<T> t = (Optional<T>) EMPTY;
return t;
}
EMPTY
是一个静态实例(来自上面链接的源代码):
/**
* Common instance for {@code empty()}.
*/
private static final Optional<?> EMPTY = new Optional<>();
Optional
class 是一个可能包含特定元素的容器。因此,它有两个概念:
- 它可能包含的类型
- 它包含的实际对象
它可能包含的类型是通过泛型指定的。泛型仅在编译时存在,在运行时丢失。
回答您的问题:
- 使用
Optional
时,您通常将其定义为可能包含一个类型,如下所示:
Optional<String> optionalString;
此时我们知道 optionalString
可能 包含一个字符串。如果我们这样做:
Optional<String> optionalString = Optional.empty();
它实际上不包含任何东西,但我们可以在任何需要 Optional<String>
的地方使用它。
Optional
的类型是通过其用法推断出来的。像上面一样,您将 Optional.empty()
指定为 Optional<String>
。您还可以通过方法的 return 值指定其类型,如下所示:
public Optional<Integer> findNumber() {
return Optional.empty();
}
- 由于类型在运行时不再存在,此时无法检查可选包含的内容。在运行时,空
Optional
没有类型。
我知道一篇 Link 的博文已经发布,但我总是在以下时间参考:Baeldung Java Optional 8
你的问题:
可选可以包含任何对象类型(如果你需要一个 int 然后使用 Integer)
Optional.of(urObject)
现在“类型”是可选的
不,你不能检查可选的类型。
所以我正在检查 Optional
Java class 我在 public static<T> Optional<T> empty()
文档中注意到了这一点:
@param <T> The type of the non-existent value*.
而且,在查看整个 class 并搜索此处和其他几页之后,我遇到了这个我无法回答的问题:
- 空
Optional
可以有特定类型吗? 1.1 如果可以,如何设置? 1.2 有什么方法可以检查它的类型吗?
无论您指定什么类型:
// Empty Optional with value type String
Optional<String> opt = Optional.empty();
这是 OpenJDK 11 中该方法的source code:
public static<T> Optional<T> empty() {
@SuppressWarnings("unchecked")
Optional<T> t = (Optional<T>) EMPTY;
return t;
}
EMPTY
是一个静态实例(来自上面链接的源代码):
/**
* Common instance for {@code empty()}.
*/
private static final Optional<?> EMPTY = new Optional<>();
Optional
class 是一个可能包含特定元素的容器。因此,它有两个概念:
- 它可能包含的类型
- 它包含的实际对象
它可能包含的类型是通过泛型指定的。泛型仅在编译时存在,在运行时丢失。
回答您的问题:
- 使用
Optional
时,您通常将其定义为可能包含一个类型,如下所示:
Optional<String> optionalString;
此时我们知道 optionalString
可能 包含一个字符串。如果我们这样做:
Optional<String> optionalString = Optional.empty();
它实际上不包含任何东西,但我们可以在任何需要 Optional<String>
的地方使用它。
Optional
的类型是通过其用法推断出来的。像上面一样,您将Optional.empty()
指定为Optional<String>
。您还可以通过方法的 return 值指定其类型,如下所示:
public Optional<Integer> findNumber() {
return Optional.empty();
}
- 由于类型在运行时不再存在,此时无法检查可选包含的内容。在运行时,空
Optional
没有类型。
我知道一篇 Link 的博文已经发布,但我总是在以下时间参考:Baeldung Java Optional 8
你的问题:
可选可以包含任何对象类型(如果你需要一个 int 然后使用 Integer)
Optional.of(urObject)
现在“类型”是可选的不,你不能检查可选的类型。