[아이템12] 하위 클래스들이 공유해야 할 문자열 표현이 있는 추상 클래스라면 toString을 재정의해줘야 한다.
2024. 7. 1. 17:11ㆍBOOKS/이펙티브 자바
대다수 컬렉션 구현체는 추상 컬렉션 클래스들의 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, …] 와 같은 형식으로 출력