On Mon, 8 Jul 2024 09:33:54 GMT, Jaikiran Pai <[email protected]> wrote:
>> Make well-behaved implementation expectations of Object.{toString, hashCode}
>> explicit.
>
> src/java.base/share/classes/java/lang/Object.java line 101:
>
>> 99: * implementation should not use excessive memory or time for its
>> 100: * computations and should return a result for cyclic data
>> 101: * structures.
>
> Hello Joe, adding this text to set the expectations looks reasonable.
> However, I think the text "should return a result for cyclic data
> structures." feels a bit odd. If I understand correctly what it's trying to
> state is that for a class of the form:
>
>
> class Foo {
> Bar bar;
> Foo self;
>
> public void setSelf() {
> this.self = this;
> }
> }
>
> then:
>
>
> Foo foo = new Foo();
> foo.toString(); // or foo.hashCode()
>
> should be able to return the output from hashCode() and toString() even when
> an instance of `Foo` has a field which holds the same `Foo` instance. i.e.
> `toString()` and `hashCode()` should be able to handle re-entrancy and
> shouldn't consume excessive memory or time.
>
> If that understanding is correct, then maybe we could improve that text to
> state it differently instead of cyclic data structures? I checked the JDK
> repo to see if this term has previously been used but it hasn't. Maybe we
> should just state that the hashCode() toString() methods should be able to
> deal with re-entrancy?
My understanding is the same. Personally, the wording reads unambiguously. The
words "circular" and "circularity" can be seen throughout codebase, in similar
contexts.
FWIW, a simpler example can be constructed like this:
var list = new ArrayList<>();
list.add(list);
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/20063#discussion_r1668342145