很明显Optional<T>
必须是不可变的,并且在用户代码中对它进行子类化会有点痛苦。但无论如何,它宣布最终的原因是什么?我们无论如何都不能将它子类化,因为所有构造函数都被声明为私有。
private Optional(T value) {
this.value = Objects.requireNonNull(value);
}
private Optional() {
this.value = null;
}
如果没有最终的类声明,Option
中的scala
似乎sealed
,实际上是Some
和None
的子类。
我没有看到完成课程的任何理由。在private static
本身内部有一些Optional
子类可能很方便。