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 <[email protected]>: > 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, Дмитрий Рябов <[email protected]> > 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. > > >
