요즘 제네릭과 공분산/반항에 대해서는 약간 혼란스러워합니다. 나는 C#이 공변 (covariant)/반 변형 (contravariant) 타입 매개 변수를 지정한다는 것을 알고 있지만 실제로 Java에서 비슷한 개념을 갖고 있습니까?자바 - 공분산과 반항이 존재합니까?
난 당신이 선언 할 수 있습니다 이해 : L2는 List<Object>
을하고 여기에 문자열을 추가 할 수 있지만 모든 요소를 얻을 수 있습니다 동안
List<? extends String> l = ...
List<? super String> l2 =...
지금 난 등 MyString
의 목록을 방법은 허용되지 않습니다 추가 할 수 있습니다, 여기에 설명 된대로 Covariance- contravariance in Java.
Iterable<Animal> a = new Iterable<Dog>();
내가 혼란 스러워요 또는 Java 단순히 적절한 공분산 정의를 지원하지 않습니다처럼이, 그러나, 단순히 subtyes/슈퍼 타입을 받아들이는 형식 매개 변수 목록을 선언하고, 일을하지 "적절한"공분산? 감사.
'반복 가능'이어야합니까? Animal> a = new 반복 가능();'Dog가 Animal을 확장한다고 가정하고 반복 가능함 ' –
예 - http://stackoverflow.com/questions/2501023/demonstrate-covariance-and-contravariance-in-java – djechlin
Java가 공변 (covariant) 타입의 param을 허용한다면, Iterable을 정확하게 의미한다. – Bober02