아이템 28. 배열보다는 리스트를 사용하라 - KwangtaekJung/book-effective-java GitHub Wiki
- 제네릭을 사용하지 않은 경우
- Object의 배열을 사용한다.
- choose 메서드를 호출할때마다 반환된 Object를 원하는 타입으로 형변환해야 한다.
- 타입이 다른 원소가 들어 있다면 런타임에 형변환 오류가 발생할 수 있다.
public class Chooser {
private final Object[] choiceArray;
public Chooser(Collection choiceArray) {
this.choiceArray = choiceArray.toArray();
}
public Object choose() {
Random rnd = ThreadLocalRandom.current();
return choiceArray[rnd.nextInt(choiceArray.length)];
}
}
- 제네릭을 사용하는 경우
- T 배열을 사용하는 것도 가능하지만 비검사 형변환 경고가 발생한다.
- List를 사용하는 것이 좋다.
public class ChooserGeneric<T> {
// private final T[] choiceArray;
private final List<T> choiceArray;
public ChooserGeneric(Collection<T> choiceArray) {
// this.choiceArray = (T[]) choiceArray.toArray();
this.choiceArray = new ArrayList<>(choiceArray);
}
public Object choose() {
Random rnd = ThreadLocalRandom.current();
// return choiceArray[rnd.nextInt(choiceArray.length)];
return choiceArray.get(rnd.nextInt(choiceArray.size()));
}
}