与多个参数(类)与自己的添加方法

问题描述:

通用的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(),但我必须使用我自己的。

+3

你需要调用'adde'上'Anthill'而不是'ArrayList'。这与泛型没有任何关系。 –

+2

我也没有看到为什么'''Anthill'''将会是一个泛型类的原因,除非你计划拥有只有'''''''''''只有''''''''的Anthill's,或者只有''' '''Queen'''s。 –

+0

你实际上并不需要你班上的通用符号。 – mdewit

问题是我想用我自己的公共无效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)); 

     } 
    } 
} 
+0

我建议使用[Java Tutorials](https://docs.oracle.com/javase/tutorial/)阅读和练习,以获取有关语言结构和用例,命名约定以及学习语言的有效使用的参考。问候 –