将Concrete.class添加到集合<class <abstract>&gt; </class <abstract>

时间:2014-02-23 20:02:22

标签: java inheritance collections abstract-class

Hi Team,

我想创建一个具体的类对象集合,它们扩展了一个常见的Abstract类或接口。

  • c1允许我存储扩展抽象类的具体实例。
  • c2允许我存储任何类的具体实例,而无法控制集合中的内容。
  • c3我认为我想要的是它,但它实际上是AbstractTest的集合,我不能将具体的类放入集合中。

    Collection<AbstractTest> c1 = new HashSet<AbstractTest>();
    c1.add(new TestImpl());
    
    Collection<Class<?>> c2 = new HashSet<Class<?>>();
    c2.add( TestImpl.class);
    
    Collection<Class<AbstractTest>> c3 = new HashSet<Class<AbstractTest>>();
    c3.add( TestImpl.class); <<< ERRORS!!!!
    

我怎样才能实现我的目标?


修改

Collection<Class<? extends AbstractTest>> c3 = 
                             new HashSet<Class< ? extends  AbstractTest>>();
    c3.add(TestImpl.class);

2 个答案:

答案 0 :(得分:1)

Collection<Class<? extends AbstractTest>>就是你想要的。

Collection<Class<? extends AbstractTest>> c3 = new HashSet<Class<? extends AbstractTest>>();
c3.add(TestImpl.class);

答案 1 :(得分:-1)

使用像ArrayList<? extends Number> list;这样的扩展,您可以在其中放置Number及其任何子类。

相关问题