英文:
What is the type of a Java empty Optional?
问题
所以事实上我在查看 Optional
Java 类时注意到在 public static<T> Optional<T> empty()
的文档中有这样的描述:
@param <T> 不存在值的类型*。
然后,在查看了整个类并在这里以及其他几个页面搜索后,我得出了以下问题,我还没有能够回答:
- 一个空的
Optional
可以拥有特定的类型吗?
1.1 如果可以,如何设置呢?
1.2 是否有任何方法可以检查它的类型?
英文:
So the thing is I was checking Optional
Java class and I noticed this in the public static<T> Optional<T> empty()
doc:
@param <T> The type of the non-existent value*.
And, after looking at the whole class and searching over here and a few other pages I came to this questions that I haven't been able to answer:
- Can an empty
Optional
have a specific type?
1.1 If so, how do you set it?
1.2 And is there any way to check its type?
答案1
得分: 9
这是您指定的任意类型:
// 具有值类型为String的空Optional
Optional<String> opt = Optional.empty();
这是来自OpenJDK 11的该方法的源代码:
public static <T> Optional<T> empty() {
@SuppressWarnings("unchecked")
Optional<T> t = (Optional<T>) EMPTY;
return t;
}
EMPTY
是一个静态实例(来自上述链接的源代码):
/**
* {@code empty()}的常见实例。
*/
private static final Optional<?> EMPTY = new Optional<>();
英文:
It's whatever type you specify:
// Empty Optional with value type String
Optional<String> opt = Optional.empty();
Here is the source code for that method from OpenJDK 11:
public static<T> Optional<T> empty() {
@SuppressWarnings("unchecked")
Optional<T> t = (Optional<T>) EMPTY;
return t;
}
EMPTY
is a static instance (from the source code linked above):
/**
* Common instance for {@code empty()}.
*/
private static final Optional<?> EMPTY = new Optional<>();
答案2
得分: 6
Optional
类是一个可能包含特定元素的容器。因此,它具有两个概念:
- 它可能包含的类型
- 它包含的实际对象
它可能包含的类型是通过泛型指定的。泛型只存在于编译时,在运行时丢失。
回答你的问题:
- 使用
Optional
时,通常会定义它可能包含的类型,就像这样:
Optional<String> optionalString;
在这一点上,我们知道optionalString
可能包含一个字符串。如果我们这样做:
Optional<String> optionalString = Optional.empty();
它实际上什么都不包含,但我们可以在需要Optional<String>
的任何地方使用它。
Optional
的类型是通过其使用来推断的。就像上面一样,您指定Optional.empty()
为Optional<String>
。您还可以通过方法的返回值来指定其类型,如下所示:
public Optional<Integer> findNumber() {
return Optional.empty();
}
- 由于在运行时不再存在类型,所以此时无法检查可选内容包含什么。在运行时,空的
Optional
没有类型。
英文:
The Optional
class is a container that might contain a specific element. As such, it has two concepts:
- The type it might contain
- The actual object it contains
The type it might contain is specified trough generics. Generics only exist at compile time and are lost at runtime.
To answer your questions:
- When using an
Optional
, you usually define it to possibly contain a type, like this:
Optional<String> optionalString;
At this point we know that optionalString
might contain a String. If we do this:
Optional<String> optionalString = Optional.empty();
It doesn't actually contain anything, but we can use it anywhere an Optional<String>
is required.
- The type of the
Optional
is inferred trough its usage. Like above, you specify theOptional.empty()
to be anOptional<String>
. You can also specify its type trough the return value of a method, like so:
public Optional<Integer> findNumber() {
return Optional.empty();
}
- Since the type is no longer present at runtime, there is no way to check what the optional contains at this point. At runtime, an empty
Optional
has no type.
答案3
得分: 1
我知道博客文章的链接已经发布了,但我总是会参考这个链接:Baeldung Java Optional 8
关于你的问题:
-
Optional 可以包含任何对象类型(如果你需要一个整数,那么使用 Integer)。
-
Optional.of(urObject)
现在 "type" 是 Optional<typeOfUrObject>。 -
不,你不能检查 Optional 的类型。
英文:
I know a Link to a Blogpost has already been posted, but I always refer back to this on: Baeldung Java Optional 8
To ur questions:
-
Optional can contain any Object type(if u need an int then use Integer)
-
Optional.of(urObject)
now the "type" is Optional<typeOfUrObject> -
No u can't check the type of the Optional.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论