티스토리 뷰

자바 5 버전 부터 Varargs의 개념이 도입되었다. (아마 5부터 등장한 제네릭의 영향인것으로 개인적으로 추정한다)

따라서 여러 argument를 메서드에서 받을 수 있다.

 

<T> void foo(T... args);

위 코드에서 T...는 T[ ] 로 변환된다.

하지만 문제는 T의 값이 가 다른 타입의 파라미터일 경우 동작하지 않는다.

new T[ ]를 사용할 수 없기 때문에 new Object[ ] 라는 것을 사용한다.

 

만약 내 메서드가 T... 타입의 argument를 가지고 있으면, 

  • Safe: array의 요소가 T의 인스턴스인지에 대해서만 달렸다. 사실에 내 메서드가 의존한다.If your method only depends on the fact that the elements of the array are instances of T
  • Unsafe: array가 T[]의 인스턴스인지에 대해서만 달렸다.

사실 잘 모르겠다...

다음 번에 추가적으로 정리하도록 할것. 

(이 페이지는 개인적인 기록 용도로 작성되었습니다.)

이상.

 

Reference:

https://www.baeldung.com/java-safevarargs

https://stackoverflow.com/questions/14231037/java-safevarargs-annotation-does-a-standard-or-best-practice-exist

 

Java SafeVarargs annotation, does a standard or best practice exist?

I've recently come across the java @SafeVarargs annotation. Googling for what makes a variadic function in Java unsafe left me rather confused (heap poisoning? erased types?), so I'd like to know a...

stackoverflow.com

 

 
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday