Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
nikosgram opened this issue Jun 25, 2015 · 6 comments
Open

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

nikosgram opened this issue Jun 25, 2015 · 6 comments

Comments

@nikosgram
Copy link

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));
    }
@sk89q
Copy link
Member

sk89q commented Jun 25, 2015

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

@nikosgram
Copy link
Author

Ow, ok.

@sk89q
Copy link
Member

sk89q commented Jun 25, 2015

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

@sk89q sk89q reopened this Jun 25, 2015
@nikosgram
Copy link
Author

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

@twizmwazin
Copy link

I would prefer use of the Optional class over nullables.

@onbjerg
Copy link
Contributor

onbjerg commented Aug 7, 2015

👎

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants