RFR 9: 8138963 : java.lang.Objects new method to default to non-null (original) (raw)
Stuart Marks stuart.marks at oracle.com
Tue Oct 6 17:03:34 UTC 2015
- Previous message: RFR 9: 8138963 : java.lang.Objects new method to default to non-null
- Next message: RFR 9: 8138963 : java.lang.Objects new method to default to non-null
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
I agree that with Stephen that Guava's semantics of disallowing a null default are preferable. It would seem very odd if a method that has "nonNull" in its name is allowed to return null.
It seems to me that the point of this and related methods is to provide a fluent way for a class to separate the nullable world outside with the non-nullable world inside. Thus,
void setValue(T arg) { // arg is nullable
field = Objects.firstNonNull(arg, DEFAULT_VALUE_FOR_FIELD);
assert field != null;
}
If the default value can be null, why bother checking arg at all? It seems to me that it's a programming error if the default value is null, so this should be checked.
As an aside I notice that Guava's Objects.firstNonNull() is deprecated, with a recommended replacement of MoreObjects.firstNonNull(). [1] The semantics are the same, though, as far as I can see. I'm curious as to what's going here, though.
[1] http://google.github.io/guava/releases/18.0/api/docs/
s'marks
On 10/6/15 7:15 AM, Stephen Colebourne wrote:
What the existing code does would seem to be irrelevant. What is important is deciding what the correct semantics should be for a core method on Objects.
If there a desperate need for the webrev semantics, how about two methods? firstNonNull(a, b) - result must not be null firstOrElse(a, b) - result is null only is b is null (although I struggle to see much point in the latter) Stephen
On 6 October 2015 at 15:09, Roger Riggs <Roger.Riggs at oracle.com> wrote: Hi Stephen, Guava's firstNonNull is a useful semantic, but would not be a drop in replacement for existing code which would need to be examined for behavioral changes due to possibly throwing an exception. So perhaps the nonNullorElse name would be more accurate. Thanks, Roger
On 10/6/2015 10:00 AM, Stephen Colebourne wrote: Guava uses firstNonNull(a, b). It ensures that the result is never null, by checking that b is not null. I think the semantics of Guava's method is correct. I tend to think the method name isn't bad either. Calling it nonNull(Object,Object) clashes with the existing nonNull(Object) method. Those two have nothing much to do with each other. Stephen
On 6 October 2015 at 14:43, Roger Riggs <Roger.Riggs at oracle.com> wrote: Java.lang.Objects contains a number of convenience methods to make it easier to handle references that are null. For example, toString(obj, nullDefault), A new method is proposed to return the reference or a default value if the reference is null. static T nonNull(T obj, T nullDefault); Alternatives to the method name include nonNullOrElse ( using the java.util.Optional name pattern) or nonNullOrDefault Please review and comment. Webrev: http://cr.openjdk.java.net/~rriggs/webrev-object-non-null/ Issue: https://bugs.openjdk.java.net/browse/JDK-8138963 Thanks, Roger
- Previous message: RFR 9: 8138963 : java.lang.Objects new method to default to non-null
- Next message: RFR 9: 8138963 : java.lang.Objects new method to default to non-null
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]