簡體   English   中英

在這種情況下使用枚舉是否正確?

[英]Is it correct to use enum in this case?

這是關於最佳實踐/風格的問題。

我有一個Printer類,可以打印出不同顏色的元素。 使用Enum作為輸入是否正確:

public class Printer {

public enum Color{RED, GREEN, BLUE}

public void print (Color color){
    MyElement myElement = new MyElement();
    switch (color) {
        case RED:
            myElement.setColor("#xxxxxx");
            break;
        case GREEN:
            myElement.setColor("#xxxxxx");
            break;
        case BLUE:
            myElement.setColor("#xxxxxx");
            break;
    }
    myElement.print();
}

}

然后從另一個類中調用該方法,如下所示:

Printer p = new Printer();
p.print(Printer.Color.RED);

...或者將值添加到枚舉中會更好:

public class Printer {

    public enum Color {
        RED("#xxxxxx"), 
        GREEN("#xxxxxx"), 
        BLUE("#xxxxxx");

        private final String hex;

        Color(String hex){
            this.hex = hex;
        }

        public String getHex(){
            return this.hex;
        }
    }

    public void print (Color color){
        MyElement myElement = new MyElement();
        myElement.setColor(color.getHex());
        myElement.print();
    }

}

...或者根本不使用枚舉,只使用普通字符串?

我認為您的解決方案沒有任何問題。 我唯一建議的是在Enum上創建一個構造函數並將顏色值存儲在那里。 但這只是一個建議。

它會是這樣的:

public class Printer {

public enum Color{
    RED("#FF0000"), GREEN("#00FF00"), BLUE("#0000FF");

    private String colorAsString;

    private Color(String colorAsString) {
        this.colorAsString = colorAsString;
    }

    public String getColorAsString() {
        return this.colorAsString;
    }
}

public void print (Color color){
    MyElement myElement = new MyElement();
    myElement.setColor(color.getColorAsString());
    myElement.print();
}

}

在常量位置使用enum通常是有意義的。 如果應用程序像問題中解釋的那樣簡單,只有1個參數(顏色值),使用字符串常量也很有效。

如果要使用enum ,則第二種方法(即,通過enum構造函數存儲顏色值的方法)是優選的。

暫無
暫無

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

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