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.

Reply via email to