java-squid/effective-java

[아이템 32] 제네릭과 가변인수를 함께 쓸 때는 신중하라

Closed this issue · 2 comments

[아이템 32] 제네릭과 가변인수를 함께 쓸 때는 신중하라

... heap pollution from ...

  • 현재 아이템에서 말하는 heap pollution은 타입 안전성이 깨져서, 런타임 시에 ClassCastException 에러가 발생할 수 있음을 말하는 듯 합니다.
  • 그럼 heap pollution이라는 단어가 의미하는 걸 직관적으로 생각해보면, JVM Heap공간에 뭔가 오류가 내재된 상태를 의미한다고 보면 될까요?

참고 : https://en.wikipedia.org/wiki/Heap_pollution#cite_note-Java-1

@102092

... heap pollution from ...

  • 현재 아이템에서 말하는 heap pollution은 타입 안전성이 깨져서, 런타임 시에 ClassCastException 에러가 발생할 수 있음을 말하는 듯 합니다.
  • 그럼 heap pollution이라는 단어가 의미하는 걸 직관적으로 생각해보면, JVM Heap공간에 뭔가 오류가 내재된 상태를 의미한다고 보면 될까요?

참고 : https://en.wikipedia.org/wiki/Heap_pollution#cite_note-Java-1

"오류가 내재된 상태"도 물론 맞지만 더 구체적으로 설명을 하자면 Generic<A>라는 정적 타입을 가지고 있는 변수가 Generic<B>라는 다른 타입 매개변수를 들고있는 객체를 가리키고 있는 상황입니다. 발생할 수 있는 경우는:

  1. 제네릭 가변인수를 사용하는 경우.
  2. 배열과 제네릭을 같이 사용해 unchecked conversion warning이 발생하는 경우.
  3. raw type을 사용해 unchecked conversion warning이 발생하는 경우.

1번과 2번의 경우에는 각각 아이템 32와 27에 타입 안전성을 검사, 보장하는 방법이 나와있고요, 3번은 아이템 26번에서 얘기했듯이 아예 안 쓰면 됩니다.