方法将对象扩展抽象类添加到java中类型为Abstract Class的Arraylist中

时间:2016-03-13 00:55:33

标签: java arraylist abstract-class

我在创建添加对象的方法时遇到了一些麻烦,这些对象将抽象类(Ant_Abstract)扩展到扩展Ant_Abstract的类型对象的ArrayList。到目前为止,我有两种蚂蚁,Scouts和Workers(都扩展了Ant_Abstract),我想在文件Anthill中使用ArrayList来包含两种蚂蚁。

当我尝试编译时:

import java.util.*;
class Anthill{
     public ArrayList<? extends Ant_Abstract> occupants=new ArrayList(15);
     Anthill(){
     }
     public<t extends Ant_Abstract> void enter(Class<t> ant){
            occupants.add(ant);
     }
}

它给了我错误:“类型ArrayList中的方法add(捕获#1-of?extends Ant_Abstract)不适用于参数(Class)

请帮忙。

1 个答案:

答案 0 :(得分:2)

为了使用&#39; T&#39;作为泛型类型,您需要在类声明中指明这一点。然后在类Anthill的属性和方法中,您可以在整个过程中引用它:

public class Anthill<T extends Ant_Abstract>{
     public ArrayList<T> occupants = new ArrayList<>(15);

     public void enter(T ant){
            occupants.add(ant);
     }
}

您需要将ArrayList的声明更改为:

     public ArrayList<T> occupants = new ArrayList<>(15);

Class<T>更改为T

您没有尝试添加Class(它本身就是一个对象类型)。 您的目的是添加一个Abstract_Ant实现的实例,而不是Class本身。

花点时间阅读Java Generics Lesson