Optional.isEmpty()

Roger Riggs Roger.Riggs at Oracle.com
Mon Apr 24 18:10:40 UTC 2017


Hi,

IMHO,boolean isEmpty() would be a good complement to the existing 
empty() method.

$.02, Roger


On 4/24/2017 1:15 PM, Anthony Vanelverdinghe wrote:
> Hi Peter
>
> I'd say no: it's merely the negation of an existing method, and given 
> that the bar for adding methods to Optional is set very high (see e.g. 
> [1] and [2]), I don't see how this one would meet it.
>
> Moreover, I don't see any issues with simply writing:
>
>     return !cf.findModule(target).isPresent();
>
> and there are plenty of one-liners that don't use boolean negation as 
> well, for example:
>
>     return cf.findModule(target).orElse(null) == null; // [3]
>     return cf.findModule(target).map(m -> false).orElse(true); // [4]
>     return cf.findModule(target).stream().count() == 0;
>     return cf.findModule(target).stream().allMatch(m -> false);
>     return cf.findModule(target).isPresent() ^ true;
>     ...
>     return cf.findModule(target).equals(Optional.empty());
>
> Adding a static import to the last one gets you very close to the 
> proposed method already:
>     return cf.findModule(target).equals(empty());
>
> Of course, another option is to introduce a variable to avoid the 
> combination of boolean negation and method chaining:
>     boolean moduleFound = cf.findModule(target).isPresent();
>     return !moduleFound;
>
> Kind regards, Anthony
>
> [1] https://bugs.openjdk.java.net/browse/JDK-8057557
> [2] https://bugs.openjdk.java.net/browse/JDK-8058707
> [3] 
> http://mail.openjdk.java.net/pipermail/jigsaw-dev/2017-April/012273.html
> [4] 
> http://mail.openjdk.java.net/pipermail/jigsaw-dev/2017-April/012290.html
>
>
> On 22/04/2017 11:40, peter.levart at gmail.com (Peter Levart) wrote:
>> Hi,
>>
>> Seeing the following line in some JDK test that was up for review:
>>
>>       return cf.findModule(target).orElse(null) == null;
>>
>> I immediately jumped to suggest it would look better if written as:
>>
>>       return !cf.findModule(target).isPresent();
>>
>>
>> But then I leaned back and asked myself: "Would it really?"
>>
>> The boolean negation in front of a chain of method calls tends to
>> visually disappear from the view when we finally reach the offending
>> method and might get missed when quickly browsing the code. In this
>> respect, ".orElse(null) == null" is actually better. But the best would
>> of course be something like that:
>>
>>       return cf.findModule(target).isEmpty();
>>
>> What do you think? Would this pull its weight?
>>
>> Regards, Peter
>>
>>
>



More information about the core-libs-dev mailing list