2013-10-03 43 views
0

我创建了2个对象:PersonMen(扩展为Person)。然后,我创建了一个通用集合,仅添加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

可能重复[Java泛型:什么是佩奇(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:那么,<?的意义是什么?扩展Person>,一个女人可以是个人......简单来说,如果我给予前者: - <?扩展对象> =列表,字符串可以从Object扩展...所以我不能添加它... – user1050619

+0

@ user1050619你必须使用通配符超级关键字。你可以阅读这个链接http://www.thejavageek.com/2013/08/28/generics-the-wildcard-operator/ –

0

使其List<? super Men> p1 = new ArrayList<Men>();。你可以阅读有关Polymorphism and generics

+0

:谢谢你的文章...现在很清楚... – user1050619

+0

@ user1050619,我真的很高兴它帮助你:) –

相关问题