首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用自己的add方法具有多个参数(类)的泛型ArrayList

使用自己的add方法具有多个参数(类)的泛型ArrayList
EN

Stack Overflow用户
提问于 2016-05-23 13:45:11
回答 1查看 363关注 0票数 0

我有5门课:

  • 蚂蚁{抽象},
  • 工作者扩展Ant,
  • 士兵扩展蚂蚁,
  • 女王伸长蚂蚁,
  • 蚁窝 公共类ArrayList antHill =新ArrayList<>();公共无效adde(T ant) { if(ant != null) { if (ant.isQueen() == true & amountOfQueens <= 1) { antHill.add(ant);amountOfQueens++;} if (ant.isQueen() == false) { antHill.add(ant);amountOfAnts++;}System.out.println(“只允许一个皇后”);}}

示例:

代码语言:javascript
复制
    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()方法时起作用,但我必须使用自己的方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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方法参数antpublic void adde(T ant)中必须是超级类型的Ant,所以您可以将任何子类型传递给该方法。

接下来,在main方法中,创建Anthill的一个实例,并调用它(而不是在ArrayList antList中)方法adde

看起来是这样的:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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));

        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37392704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档