RFR 9: 8138963 : java.lang.Objects new method to default to non-null (original) (raw)

Remi Forax forax at univ-mlv.fr
Thu Oct 8 08:49:42 UTC 2015


Hi Roger, using overloads here seems to be a bad idea, as a nice puzzler, what does the compiler do for these two lines of code Supplier supplier = Objects.nonNullOf(null, () -> null); Supplier supplier2 = Objects.nonNullOf(null, () -> "");

The other issue is that defaultSupplier should allow covariant Supplier, the signature should be: T nonNullOfGet(T obj, Supplier<? extends T> defaultSupplier)

otherwise apart form the remark of Stephen, the code is Ok.

cheers, Rémi

----- Mail original -----

De: "Roger Riggs" <Roger.Riggs at Oracle.com> À: "core-libs-dev" <core-libs-dev at openjdk.java.net> Envoyé: Jeudi 8 Octobre 2015 00:24:26 Objet: Re: RFR 9: 8138963 : java.lang.Objects new method to default to non-null

Hi, The original intent was to simplify the filling in of default values (even if null). I took Remi's point about the canonical coalescing operator not always returning non-null but the push seems to be in the direction of making sure the result is always non-null. I'd rather add a few very useful methods and avoid those with diminishing returns. I note that nulls are discovered eventually, but doing more aggressive checking is preferred. I expect the compiler is able to squeeze out all the extra checks. In the current context of Objects that the jdk, I read the naming pattern of firstNonNull to imply access to some sequential data structure like an array or list; but it doesn't gel with me to apply it to the arg list (unless it was varargs). The pattern of naming us "of" as being factory producing an object from the arguments seems apropos and is concise. Please consider and comment: T nonNullOf(T obj, T defaultObj); T nonNullOf(T, obj, Supplier defaultSupplier); Details are in the updated webrev: http://cr.openjdk.java.net/~rriggs/webrev-object-non-null/ Regards, Roger

On 10/6/2015 6:42 PM, Remi Forax wrote: > Null coalescing is a popular operator in several languages [1] and the > usual semantics is nullOrElse and not firstNonNull. > In languages like Kotlin or Swift, because there is a distinction between > Object and Object?, it's not a big deal, you can not de-reference null by > error, anyway. > > Also note that nullOrElseGet, the one that takes a supplier also exists in > Groovy and Kotlin under the name null safe navigation. > > So even if i prefer the semantics of firstNonNull, i think we should also > include both nullOrElse and nullOrElseGet. > > regards, > Rémi > > [1] https://en.wikipedia.org/wiki/Nullcoalescingoperator > > -



More information about the core-libs-dev mailing list