我在创建一个方法来将扩展抽象类(Ant_Abstract)的对象添加到扩展 Ant_Abstract 的类型对象的 ArrayList 时遇到一些问题。到目前为止,我有两种 Ant ,侦察兵和 worker (都扩展了 Ant_Abstract),我想使用 ArrayList 在文件 Anthill 中包含这两种 Ant 。
当我尝试编译时:
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(capture#1-of ? extends Ant_Abstract) 不适用于参数 (Class)
请帮忙。
最佳答案
为了将“T”用作泛型类型,您需要在类声明中指出这一点。然后在类的属性和方法中 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
您并不是试图添加类(它本身就是一个对象类型)。 您的目的是添加 Abstract_Ant 实现的实例,而不是类本身。
花点时间阅读 Java Generics Lesson
关于java - java中将扩展抽象类的对象添加到抽象类类型的Arraylist中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35965233/