Skip to content

Replace the nullable annotations with guava's Optional class. #9

Open

Description

@nikosgram

What's the point of Guava's Optional class?

Probably the single biggest disadvantage of null is that it's not obvious what it should mean in any given context: it doesn't have an illustrative name. It's not always obvious that null means "no value for this parameter" -- heck, as a return value, sometimes it means "error", or even "success" (!!), or simply "the correct answer is nothing". Optional is frequently the concept you actually mean when you make a variable nullable, but not always.

more: http://stackoverflow.com/questions/9561295/whats-the-point-of-guavas-optional-class

Optional class: http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/base/Optional.html

Example in com.sk89q.intake.argument.Namespace

    /**
     * Returns the value specified by the given key.
     *
     * @param key The key
     * @return The value, which may be null, including when the key doesn't exist
     */
    public Optional<Object> get(Object key) {
        if (!locals.containsKey(key)) Optional.absent();
        return Optional.of(locals.get(key));
    }

    /**
     * Get an object whose key will be the object's class.
     *
     * @param key The key
     * @param <T> The type of object
     * @return The value
     */
    @SuppressWarnings("unchecked")
    public <T> Optional<T> get(Class<T> key) {
        if (!locals.containsKey(key)) Optional.absent();
        return Optional.of((T)locals.get(key));
    }

Activity

  1. sk89q commented on Jun 25, 2015

    @sk89q
    Member

    I don't use Guava's Optional because it's not a proper monad and so you end up writing a lot of boilerplate code everywhere to deal with Optionals. I prefer Java 8's Optional, but it's too early to require Java 8 (plus optionals/monads are still a pain to work with prior to lambdas).

  2. nikosgram commented on Jun 25, 2015

    @nikosgram
    Author

    Ow, ok.

  3. sk89q commented on Jun 25, 2015

    @sk89q
    Member

    I was going to leave the ticket open in case there was a demand to switch over.

  4. reopened this on Jun 25, 2015
  5. nikosgram commented on Jun 25, 2015

    @nikosgram
    Author

    I do not think there is demand to switch over, but okay. 😄

  6. twizmwazin commented on Jun 25, 2015

    @twizmwazin

    I would prefer use of the Optional class over nullables.

  7. onbjerg commented on Aug 7, 2015

    @onbjerg
    Contributor

    👎

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions