Closed epicblues closed 2 years ago
T : read/write 모두 가능 ? extends T : read만 가능한 서브타입 와일드카드 ? super T : write만 가능한 슈퍼 타입 와일드카드
?
만 사용시 ? extends Object
와 동일합니다. 따라서 wrtie가 안되고 read만 가능합니다.(Object write도 제한됨)
List<? extends Object> 라고 하더라도, 인자로 들어오는 애들은 List\<String> List\<Integer> 이렇게 Object를 상속하는 타입이 고정된 상태로 오게됩니다 하지만 컴파일 시점에는 아직 뭐가올지 모르는 상태이기 때문에 메서드 안에서 add와 같은 행위를 할수 없습니다
List\<String>이 인자로 들어왔는데 Integer같은 애들을 넣는 로직이 있으면 위험하기 때문입니다. \<String>로 고정된 List는 String 타입만이 오도록 강제되어 있으므로 Object에 대한 add또한 안됩니다.
따라서 말씀하신 예제의 Collection\<?>에 대해서는 내부 아이템에 대해 Read만 가능하고 Write는 불가능합니다. null은 타입과 무관하기 때문에 예외가 아닐까 생각합니다..!
써보고 보니 알고계신 내용을 작성한듯 하네요 ㅋㅋㅋ.. ㅎ 덕분에 제가 공부하고 갑니다.. 😆
@kimziou77
헐 저 전혀 몰랐습니다 !! 그냥 아무 생각 없이 extends에서는 안되는 게 super에서는 되는구나 정도로 생각했었는데 그게 read와 write 개념이었군요 처음 알았습니다...🤣🤣 감사합니다!!
null은 어떤 타입 매개변수가 와도 오류 없이 적용될 수 있으니까 되는 것이 아닐까 생각이 드네요...!
헛 저도 이부분이 무슨말인가 했는데, @kimziou77 님 글보고 이해가 되었네요.
Collection<?>에는 null을 제외한 어떤 객체도 저장할 수 없는 것
이 말뜻이 정말 write를 못한다는 뜻이었네요. 처음 저장(?) 설정한 타입 외의 타입은 저장할 수 없다라고 이해했었네요 ;; 감사합니다 !
page 159 핵심 정리