簡體   English   中英

Java - 可以在抽象方法的參數中枚舉

[英]Java - Can enum in a parameter of an abstract method

對enum不熟悉,想問一下能不能把enum放在抽象方法里,在其他類中覆蓋? 這是我正在使用的示例:

我有許多擴展抽象類的子類,它們每個都有自己的子命令作為枚舉類型。 枚舉類型有一個 int ID 和 String 名稱。

此外,一種方法采用子命令並根據所選子命令更改輸入 UI。

public class CommandOne extends CommandClass{
    ........

    public void updateUIBySubCmd(SubCommand subCmd){
          /*Do Something*/
    }

    private enum SubCommand{
        SubCmd1    (ID1, Name1),
        SubCmd2    (ID2, Name2),
        ........
    }
}

我有一個由上述子類擴展的抽象類,它不包含任何枚舉,而只包含由子類覆蓋的幾個函數。

問題是,我可以執行以下操作並使方法 updateUIBySubCmd 成為具有枚舉類型的抽象嗎? 如果允許,我該如何實現?

public abstract class CommandClass{
..........
    public abstract void updateUIBySubCmd(Enum x);
}

聽起來你正在尋找這樣的東西:

public abstract class CommandClass<E extends Enum<E>> {
..........
    public abstract void updateUIBySubCmd(E x);
}

public class CommandOne extends CommandClass<SubCommand> {
    ........

    @Override
    public void updateUIBySubCmd(SubCommand subCmd){
          /*Do Something*/
    }
}

public enum SubCommand {
    SubCmd1    (ID1, Name1),
    SubCmd2    (ID2, Name2),
    ........
}

Java 枚舉本質上是擴展 java.lang.Enum 的類。 這就是為什么你會得到你所得到的錯誤。 父類不能指定一種類型,子類需要更受限制的類型。 它也必須指定 Enum 。

但是,我不確定 ENum 是否真的是您想要的。 您可能需要一個子命令的通用接口類型,然后將各種命令指定為特定命令實現中的靜態嵌套類。 但是,這不會為您提供任何編譯時類型安全,因為您仍然會遇到子類采用與父類相同的接口類型的問題。

暫無
暫無

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

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