Hi Dmitriy,

We should print all objects, because this is the whole purpose of
GridToStringBuilder class - to print as much as possible in pretty format.
For cyclic references, we should introduce smarter approach, ensuring that
certain object is printed only once, I would use a kind of stack or
IdentityHashMap to track already printed entries and then print a reference
to them instead of the whole body.

We use similar approach for binary objects, see
BinaryObjectExImpl.toString(...)
method. In this case (hash + body) is printed normally, but when a cycle is
found, we print only (hash). This is not very suitable for
GridToStringBuilder, as we definitely do not want output to be flooded with
hashes, which are useless in common case. May be it makes sense to object's
position in already printed string.

Vladimir.


On Wed, Feb 15, 2017 at 3:07 PM, Дмитрий Рябов <somefire...@gmail.com>
wrote:

> Hello, can you answer me a simple question?
>
> We have 2 looping lists:
>
> ArrayList<Object> list1 = new ArrayList<>();
> ArrayList<Object> list2 = new ArrayList<>();
>
> list2.add(list1);
> list1.add(list2);
>
> Class GridToStringBuilder represent them into string.
>
> Simple public static <T> String toString(Class<T> cls, T obj) method
> returns string "ArrayList [size=1]" for each list.
>
> *Question is* how should look the result of toString(Class<T> cls, T obj,
> String name, @Nullable Object val) method and other methods with additional
> values?
> "ArrayList [size=1, name=ArrayList[size=1]]" or something else?
>
> The trouble is in GridStringBuilder.a(Object obj) method - it tries to
> append collection's toString() method which invokes toString() on every
> element.
>

Reply via email to