我在创建添加对象的方法时遇到了一些麻烦,这些对象将抽象类(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)
请帮忙。
答案 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