与多个参数(类)与自己的添加方法
通用的ArrayList我有5类:与多个参数(类)与自己的添加方法
- 蚂蚁{抽象},
- 工人延伸蚂蚁,
- 士兵延伸蚂蚁,
女王延伸蚂蚁,
-
垤
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(工人)未定义的类型ArrayList。
有没有人有一个想法如何解决这个问题?它只适用于使用方法add()
,但我必须使用我自己的。
问题是我想用我自己的公共无效adde(T ant)方法将任何种类的蚂蚁(士兵,女王,工人)添加到ArrayList中。
我假设你想在定义到Anthill类中的ArrayList antHill
中添加元素。我的假设的原因是,你似乎希望保持Anthill的“人口”的数量,并且如果有一个女王进入它。
我得到方法adde(Worker)未定义的类型ArrayList的错误。
调用从类蚁丘的方法adde
,你首先必须将类实例,调用刚刚创建的对象的方法adde
。由于ArrayList实例不是Anthill实例,因此无法在ArrayList实例上调用Anthill的方法。
有没有人有一个想法如何解决这个问题?它只在使用方法add()时才起作用,但我必须使用我自己的方法。
该类蚁丘本身不能使用泛型,因为它会导致刚刚工人或士兵或女王元件类的蚁丘的情况下,并不会在过程中包含一次从类蚂蚁派生的所有类型但只有一个。而且,adde
方法参数ant
中的public void adde(T ant)
必须是超类型Ant
,因此您可以将任何子类型传递给该方法。
接下来在主要方法中创建一个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));
}
}
}
我建议使用[Java Tutorials](https://docs.oracle.com/javase/tutorial/)阅读和练习,以获取有关语言结构和用例,命名约定以及学习语言的有效使用的参考。问候 –
你需要调用'adde'上'Anthill'而不是'ArrayList'。这与泛型没有任何关系。 –
我也没有看到为什么'''Anthill'''将会是一个泛型类的原因,除非你计划拥有只有'''''''''''只有''''''''的Anthill's,或者只有''' '''Queen'''s。 –
你实际上并不需要你班上的通用符号。 – mdewit