title: Why is Optional final?
body: <p>It's pretty clear that <code>Optional&lt;T&gt;</code> has to be immutable and subclassing it in user code would be kind of painful. But anyway what is the reason it declared final? We cannot subclass it anyway because all constructors are declared as private.</p>
  
  <pre><code>private Optional(T value) {
      this.value = Objects.requireNonNull(value);
  }
  
  private Optional() {
      this.value = null;
  }
  </code></pre>
  
  <p>Without final class declaration it would look like <code>Option</code> in <code>scala</code> which is <code>sealed</code> and actually subclassed with <code>Some</code> and <code>None</code>.</p>
  
  <p>I don't see any reason of finalizing the class. It might be convinient to have some <code>private static</code> subclasses inside the <code>Optional</code> itself.</p>