2016-05-23 54 views
0

通用的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

回答

0

問題是我想用我自己的公共無效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/)閱讀和練習,以獲取有關語言結構和用例,命名約定以及學習語言的有效使用的參考。問候 –