Yes, my idea was around it - we need to stop recursion somehow. On the
other hand, position-based format is not very user-friendly, apparently.
May be some other approaches will be more suitable, but I cannot think of
anything else.

On Thu, Feb 16, 2017 at 2:26 PM, Дмитрий Рябов <somefire...@gmail.com>
wrote:

> Hello, Vladimir. Do you mean something like "ArrayList [size=1,
> name=ArrayList [size=1, ArrayList {position 0}]]"?
>
> 2017-02-16 12:32 GMT+03:00 Vladimir Ozerov <voze...@gridgain.com>:
>
> > 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