Alternative to the suffix .val and .ref in JEP 401: Primitive Objects
Brian Goetz
brian.goetz at oracle.com
Wed May 12 14:09:48 UTC 2021
On 5/11/2021 10:51 PM, Anderson Vasconcelos Pires wrote:
> Hi guys,
>
> I saw Michael Kuhlmann's e-mail [1] where he quotes:
>
> "The suffixes .ref and .val don't fit into our concept of class names, they
> look ugly and can easily be mixed up."
>
> I have no complaints about them. But I believe it would be better, *if
> possible*, not to use them.
I know this isn't what you meant, but it is definitely better not to use
them if they can be avoided! The design of the feature works hard to
minimize the cases where someone actually has to say .ref or .val; these
are escape hatches that most users should not use regularly.
> I believe it would be better to use the operator "?" instead of .ref.
> because it can be used when the "null safety" feature comes to Java. :)
We have discussed this extensively, but the reasons you cite are exactly
why we *cannot* use `?` here, and that is -- because it means something
else. Ref/val refer to how the object is stored (flat vs indirect), not
to its value set. But by calling it `Foo?`, it would be almost
impossible for users to see this as anything other than non-nullable
Foo. But identity classes, such as ArrayList, cannot be flattened (they
need their identity for mutation), and yet the notion of "non-nullable
reference to ArrayList" makes perfect sense. So while `?` and `ref`
seem to have a lot in common, they are not the same thing, and trying to
pun them together would only be confusing.
More information about the valhalla-dev
mailing list