Универсальный ArrayList с несколькими параметрами (классами) с собственным методом add

У меня 5 классов:

  • Ant {аннотация},
  • Рабочий расширяет Ant,
  • Солдат расширяет Муравей,
  • Королева расширяет Муравей,

  • Муравейник

    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));

    }

Проблема в том, что я хочу добавить любой вид муравьев (солдат, Королева, рабочий) в ArrayList с помощью моего собственного public void adde(T ant)метода.

Я получаю ошибку, что метод adde (Worker) не определен для типа ArrayList.

У кого-нибудь есть идея, как это решить? Это работает только при использовании методаadd(), но я должен использовать свой собственный.

1 ответ

  1. Проблема в том, что я хочу добавить любой вид муравьев (солдат, Королева, рабочий) в ArrayList с помощью моего собственного метода public void adde(t ant).

    я предполагаю, что вы хотите добавить элементы в ArrayList antHillопределенный класс Anthill. Причина моих предположений заключается в том, что, кажется, вы хотите вести учет «популяции» муравейника и если есть королева в нем.

    Я получаю ошибку, что метод adde (Worker) не определен для типа ArrayList.

    чтобы вызвать метод addeиз класса Anthill, сначала необходимо создать экземпляр класса, чтобы вызвать метод addeна только что созданный объект. Поскольку экземпляр ArrayList не является экземпляром Anthill, нельзя вызвать метод Anthill на экземпляре ArrayList .

    У кого-нибудь есть идея, как это решить? Он работает только при использовании метода add (), но я должен использовать свой собственный.

    для самого муравейника класса нельзя использовать дженерики, потому что это приведет к экземплярам муравейников класса только рабочих или солдатских или королевских элементов и, конечно, не будет содержать сразу все типы, производные от класса Ant, а только один. Кроме того, параметр addemethod antin public void adde(T ant)должен иметь супер-типAnt, чтобы можно было передать методу любой подтип.

    Далее в основном методе создаем экземпляр муравейника и вызываем его (не в самом 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.");
            }
        }
    }   
    

    здесь основное.Ява :

    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));
    
            }
        }
    }