在这种情况下使用枚举是否正确?

use*_*273 3 java enums

这是关于最佳实践/风格的问题.

我有一个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();
}

}
Run Code Online (Sandbox Code Playgroud)

然后从另一个类中调用该方法,如下所示:

Printer p = new Printer();
p.print(Printer.Color.RED);
Run Code Online (Sandbox Code Playgroud)

...或者将值添加到枚举中会更好:

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();
    }

}
Run Code Online (Sandbox Code Playgroud)

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

Ped*_*Vaz 5

我认为您的解决方案没有任何问题.我唯一建议的是在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();
}
Run Code Online (Sandbox Code Playgroud)

}