Skip to content

Comment on Deprecating: java.util.Optional.get()?parent

Comments

Optional is like a generic NullObject. What should e.g. Map#get return, if not Optional?

Java's Optional is exactly unlike a NullObject. Optional is not a Proxy. Being untyped, not being an implementation of the interface, it can't be used interchangeably.

It's NullObjects all the way down. Makes more sense when designs favor compositions over inheritance.

Optional is the wrapper no one needed. For syntactic sugar, static library methods worked just fine.

Am I missing something? Optional<String> can't contain an integer - it's either empty or contains a String. It certainly looks typed from where I sit.

So once again, if you didn't have Optional, what should Map#get return?

Really?

  class Widget {...}

  class final NullWidget extends Widget {
    static NULL_WIDGET = new NullWidget();
    ...
  }

  class WidgetMap extends HashMap<String,Widget> {
    Widget get( String key ) { 
      if( contains( key )) { return super.get( key ); }
      return NULL_WIDGET;
    }
    ...
  }

Urgh. Sure that's one option, but I don't want to have to subclass HashMap every time I want to store something different in it. Also sometimes I want generic code that uses a map.

And sometimes you want a different type of map...

AboutSource Built by g1lg1l

Hackerly is an independent reader for Hacker News, built on the public HN API. Not affiliated with Y Combinator.