[Effective Java] 제네릭과 가변인수를 함께 쓸 때는 신중하라.


[Effective Java] 제네릭과 가변인수를 함께 쓸 때는 신중하라.

가변인수 가변인수는 메서드에 넘기는 인수의 개수를 클라이언트가 조절할 수 있게 해줌 하지만 가변인수 메서드를 호출하면 가변인수를 담기 위한 배열이 자동으로 하나 만들어짐 내부로 감춰야 할 배열을 클라이언트에 노출하는 문제가 생김 그 결과 가변인수 매개변수에 제네릭이나 매개변수화 타입이 포함되면 알기 어려운 컴파일 경고 발생 실체화 불가 타입은 런타임에는 컴파일 타임보다 타입 관련 정보를 적게 담고 있음 메서드를 선언할 때 실체화 불가 타입으로 가변인수 매개변수를 선언하면 컴파일러가 경고 발생 위 코드에서는 형변환하는 곳이 보이지 않는데도 인수를 건네서 호출하면 예외를 던진다. 마지막 줄에 형변환이 숨어 있기 때문이다. 위와 같은 사례로 타입 안전성이 깨지니 제네릭 가변인수 배열 매개변수에 값을 저장하는 건 안전하지 않음 @SafeVarargs @SafeVarargs 애네티이션으로 제네릭 가변인수 메서드 작성 시에 클라이언트 측에서 발생하는 경고를 숨길 수 있게 되었음 이 애너테이션은...


#effectivejava #가변인수 #이펙티브자바 #자바 #제네릭

원문링크 : [Effective Java] 제네릭과 가변인수를 함께 쓸 때는 신중하라.