Intake icon indicating copy to clipboard operation
Intake copied to clipboard

Replace the nullable annotations with guava's Optional class.

Open nikosgram opened this issue 10 years ago • 6 comments

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));
    }

nikosgram avatar Jun 25 '15 17:06 nikosgram

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).

sk89q avatar Jun 25 '15 18:06 sk89q

Ow, ok.

nikosgram avatar Jun 25 '15 18:06 nikosgram

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

sk89q avatar Jun 25 '15 18:06 sk89q

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

nikosgram avatar Jun 25 '15 19:06 nikosgram

I would prefer use of the Optional class over nullables.

twizmwazin avatar Jun 25 '15 19:06 twizmwazin

:-1:

onbjerg avatar Aug 07 '15 14:08 onbjerg