정리

제네릭 varargs 배열 매개변수 값을 저장하는 것은 안전하지 ㅇ낳다. varargs 매개변수 배열에 다른 메서드가 접근하도록 허용하면 안전하지 않다. 제네릭이나 매개변수화 타입의 varargs 매개변수를 받는 모든 메서드에 @SafeVarargs 를 달라.

다음 두 조건을 모두 만족하는 varargs 메서드는 안전하다.

  • varargs 매개변수 배열에 아무것도 저장하지 않는다.
  • 그 배열을 신뢰할 수 없는 코드에 노출하지 않는다.

핵심정리

가변인수와 제네릭은 궁합이 좋지 않다. 가변인수 기능은 배열을 노출하여 추상화가 완벽하지 못하고, 배열과 제네릭의 타입 규칙이 서로 다르기 때문이다. 제네릭 varargs 매개변수는 타입 안전하지는 않지만, 허용된다. 메서드에 제네릭 varargs 매가변수를 사용하고자 한다면, 먼저 그 메서드가 타입 안전한지 확인한 다음 @SafeVarargs 애너테이션을 달아 사용하는데 불편함이 없게끔 하자.