Closed yngbao97 closed 1 month ago
외부에서 배열을 참조할 수 없는 경우란, 가변 인자를 받는 메소드에서 외부 메서드를 호출하지 않는 경우를 의미합니다. 이는 다시 말해, 외부 메서드에서 요구하는 인자 혹은 외부 변수에 대한 타입으로 형 변환에서의 오류가 방지되는 경우입니다. 사실 '외부에서 배열을 참조할 수 없는 경우'란 '배열이 외부에서 형 변환이 즉시 되지 않는 경우'라고 보아도 될 것 같습니다.
저도 인자들의 형식에 따라 arguments의 type이 바뀌는 걸 조금은 찾아보았는데, 아직 찾아보지는 못했습니다. 추측으로는 클래스 메타데이터가 있다면... 서로 처음 일치하는 부분을 가져오는 게 아닌가 싶기도 한데, 정확한 정보가 생기면 꼭 이슈를 올려보겠습니다!
Based on: chapter_05/item32_손영준_제네릭과-가변-인자에-대한-심화-탐구.md by @Glenn-syj
책으로 읽을 때는 가변인자를 제네릭으로 사용했을 때 일어나는 문제점과 이를 보완하기 위한 방법들에 무슨 차이가 있는지 잘 와닿지 않았었는데, 오류가 일어나는 과정을 깔끔하게 정리해주셔서 스스로 이해가 되는 부분과 의문이 드는 부분이 무엇인지 구분할 수 있게 되었습니다.
찾아봐도 적절한 답변을 발견하기 어려워서 질문드리고 싶은 부분이 2가지인데요.
먼저, @SafeVarargs 애너테이션을 사용하기 위한 조건 두가지 중
(2) 외부에서 배열을 참조할 수 없는 경우
가 어떤 경우라고 생각하시는지 예시가 궁금합니다.다음으로
2. 예시 코드를 통한 힙 오염 확인
부분에서는라고 쓰여있는데,
더 나아가기
마지막 예시 코드에서는 각 인자들의 형식에 따라 arguments 의 클래스 타입이 다르게 나타나는 것(ex: String 타입의 인수만 입력했을 때 여기서는 String타입으로 출력됨)이 어떤 차이인지, 혹시 조사를 통해 알게되신 바가 있는지 궁금합니다!항상 유용한 탐구 글 감사합니다!