On Mon, 8 Jul 2024 09:55:27 GMT, Pavel Rappo <[email protected]> wrote:
>> 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);
Changed to "cyclic/circular".
The "A" in "DAG" stands for "acyclic", but circular may be more commonly used.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/20063#discussion_r1668962044