Реализация toString() в AbstractCollection Sun JDK
От: Tricks_Ter  
Дата: 29.08.10 16:05
Оценка:
Почему выбрана именно такая реализация?
public String toString() {
        Iterator<E> i = iterator();
    if (! i.hasNext())
        return "[]";

    StringBuilder sb = new StringBuilder();
    sb.append('[');
    for (;;) {
        E e = i.next();
        sb.append(e == this ? "(this Collection)" : e);
        if (! i.hasNext())
        return sb.append(']').toString();
        sb.append(", ");
    }


В проектировании еще не достаточно силен, поэтому начал понемногу смотреть реализацию сложных механизмов Java. И естественно спрашивать советы у более опытных товарищей. Ниже приведу свой вариант и свои мысли, интересует code review и пояснения почему было сделано именно так, а не иначе.

public String toString() {
        //Экономим на создании итератора, когда он не нужен, да и читаемость выше, на мой взгляд
        if(isEmpty())
            return "[]";

    StringBuilder sb = new StringBuilder();
    sb.append('[');
    
    //Не понимаю, почему используется конструкция for(;;), а не хотя бы while(i.hasNext())
    for(E e: this)
        {
        sb.append(e == this ? "(this Collection)" : e);
        sb.append(", ");
    }

    return sb.append(']').toString();
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.