[아이템12] 하위 클래스들이 공유해야 할 문자열 표현이 있는 추상 클래스라면 toString을 재정의해줘야 한다.

2024. 7. 1. 17:11BOOKS/이펙티브 자바

대다수 컬렉션 구현체는 추상 컬렉션 클래스들의 toString 메서드를 상속해 쓴다.

public class HashSet<E>
    extends AbstractSet<E>
    implements Set<E>, Cloneable, java.io.Serializable {
        ...
}
public abstract class AbstractSet<E> extends AbstractCollection<E> implements Set<E> {
        ...
}
public abstract class AbstractCollection<E> implements Collection<E> {
        ...

        public String toString() {
        Iterator<E> it = iterator();
        if (! it.hasNext())
            return "[]";

        StringBuilder sb = new StringBuilder();
        sb.append('[');
        for (;;) {
            E e = it.next();
            sb.append(e == this ? "(this Collection)" : e);
            if (! it.hasNext())
                return sb.append(']').toString();
            sb.append(',').append(' ');
        }
    }
}
  • HashSet은 toString() 없음
  • AbstractCollection에 정의된 toString 메서드를 상속해서 사용
  • AbstractCollection의 toString 메서드 상속해서 사용하는 클래스들은 [item1, item2, …] 와 같은 형식으로 출력