2013-10-03 3 views
0

PersonMen (확장 Person)의 객체 2 개를 생성했습니다. 그런 다음 generic 콜렉션을 작성하여 Men 오브젝트 만 추가했지만 어떤 이유로 그것이 Men 오브젝트를 추가 할 수 없습니다.컬렉션 제네릭에서 정의 된 유형의 객체를 추가 할 수 없습니다.

class Person{ 

} 

class Men extends Person{ 

} 

public class test extends HashSet<Person>{ 

    public static void main(String[] args) { 

     List<? extends Person> p1 = new ArrayList<Men>(); 
     p1.add(new Men()); 

    } 

} 
+0

가능한 중복 읽을 수 있습니다 (http://stackoverflow.com/questions/2723397/java-generics-what-is-pecs) –

답변

7

List<? extends Person>는 "Person를 확장 몇 가지 구체적인 유형의 List, 그러나 우리는 그 구체적인 유형이 실제로 무엇인지 모른다"를 의미한다. 우리가 아는 한 모두 List<Women> 일 수 있습니다! 따라서 실제로 을 추가 할 수 없습니다 (null 제외). 당신은 가능성이 원하는 :

List<Men> p1 = new ArrayList<Men>(); // a list of only Men instances 

은 참조 : Wildcards

+2

확실하지 않은 '목록을 '!!!? –

+0

@Arshaji : 그렇다면 , 여성은 사람이 될 수 있습니다. 내가 예를 들면 줄 경우 : - = List , Object ...에서 문자열을 확장 할 수 있으므로 추가 할 수 없습니다. – user1050619

+0

@ user1050619 와일드 카드로 super 키워드를 사용해야합니다. 이 링크를 읽을 수 있습니다 http://www.thejavageek.com/2013/08/28/generics-the-wildcard-operator/ –

0

List<? super Men> p1 = new ArrayList<Men>();을합니다. [? 자바 제네릭 : PECS 무엇입니까] 당신은 대한 Polymorphism and generics

+0

: 기사 주셔서 감사합니다 ... 지금은 분명합니다 ... – user1050619

+0

@ user1050619, 정말 도움이 되서 기쁩니다. :) –

관련 문제