簡體   English   中英

接口、參數化類型和集合

[英]Interfaces, Parameterized Types and Collections

這可能是一個 java 101 問題。 但是我已經離開 Java 十年了,所以它對我來說是新的。

  1. 我有 3 個班級:狗、貓、老鼠

  2. 每個都有自己的 ArrayList 例如, ArrayList<Dog> dogs = new ArrayList<Dog>();

  3. Dog Cat 和 Mouse 實現了 AnimalInterface(它具有諸如 getFurColor() 和 setFurColor(Color c) 之類的方法)。

  4. 我有一個方法,比如說,changeFurColor(ArrayList <AnimalInterface>list)。

  5. 此外,changeFurColor() 使用實現 <AnimalInterface> 的比較器對輸入 ArrayList 進行排序,因此我需要在我的 changeFurColor() 方法中使用此參數化類型。

  6. 我用 changeFurColor(dogs) 調用該方法;

但是,這不會編譯。 <Dog> 類型與 <AnimalInterface> 類型不匹配,即使前者實現了后者。

我知道我可以簡單地使用 ? 作為 changeFurColor 參數的類型,然后在方法中強制轉換或執行實例作為檢查,但隨后我無法使用比較器對列表進行排序(並且擁有 3 個不同的比較器似乎很愚蠢)。

我不能用 <AnimalInterface> 輸入所有的 ArrayList,因為我不想讓狗和貓一起冒險。

我確信有一個簡單的解決方案,但我的書都沒有提供它,而且我在網上找不到它

偽代碼:

public interface AnimalInterface
{
    public Color getColor();
    ......
}

public class Dog implements AnimalInterface
{

}
public class Cat implements AnimalInterface
{

}

public void example()
{
    ArrayList<Dog> dogs = new ArrayList<Dog>();
    ArrayList<Cat> cats = new ArrayList<Cat>();
    ArrayList<Mouse> mice = new ArrayList<Mouse>();
    changeFurColor(dogs)

}

public void changeFurColor(ArrayList <AnimalInterface> list)
{
    ... ..

    Collections.sort(list, MyAnimalFurComparator);

}


public class MyAnimalFurComparator implements Comparator<AnimalInterface>
{

    @Override
    public int compare(AnimalInterface o1, AnimalInterface o2)
    {
        ...
    }
}

更新changeFurColor(dogs) 不編譯

這是正確答案(對於跟隨我的新手)

歸功於 Solitirios 對這個問題的評論。

public static <T extends AnimalInterface> void changeFurColor(ArrayList<T> list) –

我在設計中沒有看到任何問題。我需要確切的代碼來說明到底出了什么問題,但可能的錯誤是:

  1. 您沒有在動物類 (Dog,Cat..) 中實現 AnimalInterface 方法,該方法需要明確實現:

     class Dog implements AnimalInterface{public Color getColor(){return new Color();}} class Cat implements AnimalInterface{public Color getColor(){return new Color();}}
  2. 您正在傳遞 Comparator 類,而不是 Collections.sort 方法中的實例:

     Collections.sort(list, MyAnimalFurComparator);

    你需要把它改成這樣:

     Collections.sort(list,new MyAnimalFurComparator());
  3. 另外你的 MyAnimalFurComparator 的 compare 方法應該返回一個 int

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM