我有5门课:
示例:
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));
}问题是,我希望使用我自己的ArrayList方法将任何类型的蚂蚁(士兵、皇后、工人)添加到public void adde(T ant)中。
我得到一个错误,即ArrayList类型的adde(Worker)方法是未定义的。
有谁知道怎么解决这个问题吗?它只在使用add()方法时起作用,但我必须使用自己的方法。
发布于 2016-05-23 15:23:31
问题是,我想使用我自己的公共无效adde(T ant)方法将任何类型的蚂蚁(士兵、皇后、工人)添加到ArrayList中。
我假设您希望在定义的ArrayList antHill中添加元素到Anthill类中。我假设的原因是,你似乎想要统计“蚁窝”的“数量”,如果里面有女王的话。
我得到一个错误,即ArrayList类型的adde(Worker)方法是未定义的。
要从类Anthill调用方法adde,首先必须实例化类,然后调用刚创建的对象上的方法adde。因为ArrayList实例不是Anthill实例,所以不能在ArrayList实例上调用Anthill的方法。
有谁知道怎么解决这个问题吗?它只在使用add()方法时起作用,但我必须使用自己的方法。
对于类Anthill本身,您不能使用泛型,因为它将导致仅包含Worker或Soldier或Queen元素的类组合的实例,当然不会同时包含从类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));
}
}
}https://stackoverflow.com/questions/37392704
复制相似问题