我有5个班级:
Queen扩展了Ant,
Anthill
public class Anthill<T extends Ant> {
ArrayList <Ant> antHill = new ArrayList<>();
public void adde(T ant)
{
if(ant != null)
{
if (ant.isQueen() == true && amountOfQueens <= 1)
{
antHill.add(ant);
amountOfQueens++;
}
else if (ant.isQueen() == false)
{
antHill.add(ant);
amountOfAnts++;
}
else
{
System.out.println("Only one queen is permitted.");
}
}
}
示例:
import java.util.ArrayList;
public class Main {
public static void main(String [] args){
ArrayList <Ant> antList = new ArrayList<>();
for(int i = 1; i<6; i++){
antList.adde(new Worker(6, "AW", 0, i));
}
问题是我想使用我自己的public void adde(T ant)
方法将任何类型的蚂蚁(士兵,女王,工人)添加到ArrayList中。
我得到的错误是方法adde(Worker)未定义类型ArrayList。
有谁知道如何解决这个问题?它仅在使用方法add()
时有效,但我必须使用自己的方法。
答案 0 :(得分:0)
问题是我想使用我自己的public void adde(T ant)方法将任何类型的蚂蚁(士兵,女王,工人)添加到ArrayList中。
我假设您要在Anthill类中定义的ArrayList antHill
中添加元素。我的假设的原因是,你似乎想要计算蚁丘的“人口”数量,如果有一个女王的话。
我得到的错误是方法adde(Worker)未定义类型ArrayList。
要从Anthill类中调用方法adde
,首先必须实例化该类,以便在刚创建的对象上调用方法adde
。由于ArrayList实例不是Anthill实例,因此您无法在ArrayList实例上调用Anthill的方法。
有谁知道如何解决这个问题?它只在使用方法add()时才有效,但我必须使用自己的方法。
对于Anthill这个类本身你不能使用泛型,因为它会导致Anthills只有工人或士兵或女王元素的实例,并且当然不会包含从类Ant派生的所有类型但只有一个。此外,adde
中的ant
方法参数public void adde(T ant)
必须是超类型Ant
,因此您可以将任何子类型传递给该方法。
接下来在main方法中创建一个Anthill实例,并在方法ArrayList antList
上调用它(不在adde
中)。
它看起来像这样:
public class Anthill {
ArrayList <Ant> antHill = new ArrayList<>();
public void adde(Ant ant)
{
if(ant != null)
{
// Assuming ant.isQueen() returns a boolean.
// amountOfQueens must be 0 to permit the insertion of max 1 Queen instance in the list
if (ant.isQueen() && amountOfQueens == 0)
{
antHill.add(ant);
amountOfQueens++;
}
else if (ant.isQueen() == false)
{
antHill.add(ant);
amountOfAnts++;
}
else
{
System.out.println("Only one queen is permitted.");
}
}
}
这里是Main.java:
import java.util.ArrayList;
public class Main {
public static void main(String [] args)
{
Anthill antHill = new Anthill();
for(int i = 1; i<6; i++)
{
antHill.adde(new Worker(6, "AW", 0, i));
}
}
}