Patterns and nulls
brian.goetz at oracle.com
Wed Mar 14 21:47:15 UTC 2018
> If records were changed to not allow null, then `new Box(null)` would
> not be possible. Would that not change the line of reasoning here?
No. Pattern matching is not just for records, it's just that (a) like
other conveniences, records come with deconstruction patterns free out
of the box, and (b) records are likely to be the first construct against
which will be able to pattern match. But over time, we'll extend
pattern matching to arbitrary classes and more.
Even if it did simplify pattern matching, it seems like an unreasonable
restriction on records. Like it or not, nulls are part of Java's data
model. (I understand the desire to not let _new_ constructs be polluted
by old mistakes, but its a siren song. Everything is connected to
everything else. It's one more case where you can't refactor a class to
a record. And having complex rules of "you can have null in these
classes but not those" just makes things more complicated.)
And even if it were a reasonable restriction, it would further interact
poorly with mutable records. Mutable records could sport a no-arg
constructor, but then you'd need a sensible non-null default for every
field. There might be sensible defaults for Strings (""), Lists (empty
list), etc, but that's surely not true for all the things you might put
in a record.
More information about the amber-dev