2023-java-study / book-study

북 스터디 기록 레포지토리
0 stars 0 forks source link

[Item 26] 제네릭 하위 타입 #90

Closed gmelon closed 1 year ago

gmelon commented 1 year ago

List<String>List<Object>의 하위타입이 되지 않도록 제네릭을 설계한 이유가 뭘까요?

제네릭 공부할 때부터 들었던 의문인데 String은 Object 의 하위 타입이므로 List 가 List을 받아도 문제될 것이 없어보이는데 제네릭은 이걸 막고 있잖아요? 이렇게 설계된 이유가 분명 있을텐데 그게 뭘지 궁금합니다!

gmelon commented 1 year ago

Item 28에서 알려주네요 머쓱

List<Object>List<String>을 받게 되면 대입 당시에는 문제가 되지 않고 또 String 원소만 넣고 뺸다는게 보장이 되면 문제가 없겠지만,

List<Object>에 대입된 실제 인스턴스 List<String> 에 예를 들어 Integer 원소를 넣게 되는 상황은 말이 안 되는거기 때문에 (배열에서는 이게 가능하고 그래서 이런 상황에 ArrayStoreException 이 발생) 애초에 컴파일이 되지 않도록 막아둔 거군용

ssstopeun commented 1 year ago

네! 저도 살짝 이해가 안된채로 넘어갔는데 28에서 아하..! 했어요!!!!