Possible candidates:

 - Identity, as in "class Foo implements Identity".  This says what it means, though it is quite possible that it will clash with existing types.  (This is not an absolute disqualifier, but it is a consideration.)  - IdentityObject.  This is where we are now; it always felt a little clunky to me.  - ObjectIdentity ("class Foo implements ObjectIdentity").  Better than IdentityObject, less likely to clash than Identity.  - WithIdentity.  Not the best name, but less likely than Identity to clash.

Others?

Thinking on this for a few days ...

I like "Identity" but it is sure to clash with every ORM and similar system out there.  I think I slightly prefer `ObjectIdentity` to `IdentityObject`, and both to `WithIdentity` and `HasIdentity`.

Note that originally we were thinking that these types might be abstract classes; now that they are interfaces, this has slight consequences for the natural naming, as interfaces are often named for adjectives (Comparable) but abstract classes are almost always named for nouns.  We should evaluate these, in part, on how they sound in

    class C implements I

and,

    class String implements ObjectIdentity

more directly expresses the point -- that one of the behaviors of String is that it has an object identity -- than does:

    class String implements IdentityObject

It also puts the focus on the _identity_, rather than the object itself, which is consistent with breaking this behavior out of the root type and into a "mix in."


Reply via email to