The interfaces IdentityObject and ValueObject must die !

John Rose john.r.rose at oracle.com
Thu Jan 27 01:18:03 UTC 2022


On 26 Jan 2022, at 16:36, Dan Smith wrote:

> An instance of a class is also an instance of (and carries the 
> properties of) its superclasses. Value objects are instances of the 
> class Object.
>
> I can imagine a design in which we say that instances of Object may be 
> either identity or value objects, but direct instances of the class 
> are always identity objects. But this is not how we've handled the 
> property anywhere else, and it breaks some invariants. We've gotten 
> where we are because it seemed less disruptive to introduce a subclass 
> of Object that can behave like a normal identity class.

And yet there is also a second way a class can be an instance; it can be 
*exactly an instance of C*, when `x.getClass()==C.class`.  That’s the 
condition which can be teased apart here, if we allow ourselves to use 
something other than marker interfaces.  But marker interfaces (as I 
said) are committed to ignoring the “exactly an instance” condition, 
because they inherit.


More information about the valhalla-spec-observers mailing list