为什么在Java中用单独的文件声明枚举?

17 java enums

为什么这个枚举在自己的文件中声明.这有优势吗?我怎么能把它放在2个文件中的一个.我真的不知道我在做什么.请以简单的方式解释这一点,因为这是一个教科书示例,我对Java很新.

ScaleName.java

enum ScaleName {celsius, fahrenheit, kelvin, rankine};
Run Code Online (Sandbox Code Playgroud)

Temperature.java

class Temperature {

    private double number;
    private ScaleName scale;

    public Temperature() {
        number = 0.0;
        scale = ScaleName.fahrenheit;
    }

    public Temperature(double number) {
        this.number = number;
        scale = ScaleName.fahrenheit;
    }

    public Temperature(ScaleName scale) {
        number = 0.0;
        this.scale = scale;
    }

    public Temperature(double number, ScaleName scale) {
        this.number = number;
        this.scale = scale;
    }

    public void setNumber(double number) {
        this.number = number;
    }

    public double getNumber() {
        return number;
    }

    public void setScale(ScaleName scale) {
        this.scale = scale;
    }

    public ScaleName getScale() {
        return scale;
    }
}
Run Code Online (Sandbox Code Playgroud)

UseTemperature.java

class Temperature {

    private double number;
    private ScaleName scale;

    public Temperature() {
        number = 0.0;
        scale = ScaleName.fahrenheit;
    }

    public Temperature(double number) {
        this.number = number;
        scale = ScaleName.fahrenheit;
    }

    public Temperature(ScaleName scale) {
        number = 0.0;
        this.scale = scale;
    }

    public Temperature(double number, ScaleName scale) {
        this.number = number;
        this.scale = scale;
    }

    public void setNumber(double number) {
        this.number = number;
    }

    public double getNumber() {
        return number;
    }

    public void setScale(ScaleName scale) {
        this.scale = scale;
    }

    public ScaleName getScale() {
        return scale;
    }
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*n C 26

为什么在Java中用单独的文件声明枚举?

你不必须申报enum在一个单独的文件.你可以这样做:

public class Temperature {
    public enum ScaleName {celsius, fahrenheit, kelvin, rankine};

    private double number;
    private ScaleName scale;

    public Temperature() {
        number = 0.0;
        scale = ScaleName.fahrenheit;
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

这个和使枚举成为顶级类的唯一区别是,当您在另一个类中使用它时,您现在需要限定枚举的名称.

但是,如果枚举是常规类,那么这里发生的事情也没有什么不同.(并且枚举是隐式静态的,所以我们不需要static关键字......)


为什么这个枚举在自己的文件中声明.

因为代码作者选择这样做.

这有优势吗?

是.这意味着没有资格enum使用它...在某些情况下,如果enum嵌套如上所述.


实际上,Java允许您将多个顶级类放入同一个源文件中,前提是除了其中一个类之外的所有类都是"包私有".然而,这样做通常被认为是不好的风格,对某些工具链来说可能会有问题......我听说过.


fge*_*fge 14

枚举不仅仅是Java中的裸值,它们远不止于此.它们本身就是类(它们继承Object).并考虑这些:

public enum Int {
    ONE(1),
    TWO(2);

    private final int value;

    Int(final int value) { this.value = value; }

    public int getValue() { return value; }

    @Override
    public String toString() { return "I am integer " + value; }
}
Run Code Online (Sandbox Code Playgroud)

还要考虑:

public enum Operation
{
    PLUS
        {
            @Override
            public int calculate(final int i1, final int i2)
            {
                return i1 + i2; 
            }
        };

    public abstract int calculate(int i1, int i2);
}

final int ret = Operation.PLUS.calculate(2, 3);
Run Code Online (Sandbox Code Playgroud)

你也可以将它们结合起来.它们是非常强大的工具.


Jac*_*ack 5

Anenum是 aclass并遵循相同的规定。

将其放在自己的文件中就像将内部类移动到单独的文件中一样,仅此而已。所以是的,您可以将它移到类之一中,并能够使用OuterClass.ScaleName语法从外部访问它。