Passing Optional.absent() values to methods concisely

后端 未结 3 1232
不思量自难忘°
不思量自难忘° 2021-02-18 22:31

One problem with using Guava\'s Optional type as arguments of methods is that you can\'t simply write

// method declaration
public void foo(Optional         


        
相关标签:
3条回答
  • 2021-02-18 22:44

    So, this is the right way to do this. If not for anything else, let me at least show it here for my own future reference, for everyone who doesn't read questions, like myself :) Thanks to ColinD (and Alexey).

    foo(Optional.<String>absent())
    
    0 讨论(0)
  • 2021-02-18 22:53

    Just when writing the question, I thought of having

    public class GuavaConstants {
        @SuppressWarnings( { "raw" })
        public static final Optional ABSENT = Optional.absent();
    
        // similar for empty ImmutableList, etc.
    }
    

    and then the call can look like

    @SuppressWarnings( { "unchecked" })
    foo(GuavaConstants.ABSENT);
    

    Is there a better approach?

    0 讨论(0)
  • 2021-02-18 22:57

    If you are dealing with a small set of Optional<> types (e.g., mostly strings or a handful of other types), just create some helper methods that bind the type argument for you:

    public final class AbsentValues {
        public static Optional<String> absentString() {
            return Optional.<String>absent();
        }
    }
    

    You can even import these statically to result in cleaner code:

    import static AbsentValues.*;
    
    ...
    
    foo(absentString());
    

    For less common Optional<> types, just specify the type argument explicitly. It may not be pretty, but it's correct.

    0 讨论(0)
提交回复
热议问题