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

在Java中,为什么要在单独的文件中声明枚举?,java,enums,Java,Enums,为什么要在自己的文件中声明此枚举。这有什么好处吗?还有,我怎样才能把这两个文件之一。我真的不知道我在做什么。请用一种简单的方式来解释这一点,因为这是一个教科书上的例子,而且我对Java相当陌生 ScaleName.java enum ScaleName {celsius, fahrenheit, kelvin, rankine}; Temperature.java class Temperature { private double number; private Scale

为什么要在自己的文件中声明此枚举。这有什么好处吗?还有,我怎样才能把这两个文件之一。我真的不知道我在做什么。请用一种简单的方式来解释这一点,因为这是一个教科书上的例子,而且我对Java相当陌生

ScaleName.java

enum ScaleName {celsius, fahrenheit, kelvin, rankine};
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;
    }
}
useTempture.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;
    }
}

enum
是一个
,遵循相同的规则


将它放在自己的文件中,就像在单独的文件中移动一个内部类一样,这一点也不多。因此,是的,您可以将它移动到一个类中,并能够使用
OuterClass.ScaleName
语法从外部访问它。

枚举在Java中不仅仅是裸值,它们远远不止这些。它们本身就是类(它们继承
对象
)。考虑这些:

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; }
}
还考虑:

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);
你也可以把两者结合起来。它们是非常强大的工具

在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;
    }
    ...
}
这与使枚举成为顶级类之间的唯一区别在于,当您在其他类中使用枚举时,现在需要限定其名称

但是,我的示例中发生的情况与枚举是任何其他静态嵌套类时发生的情况没有什么不同。(嵌套枚举是隐式静态的,因此我们不需要
static
关键字。请参阅。)


为什么要在自己的文件中声明此枚举

因为代码作者选择了这种方式1

这有什么好处吗

对。这意味着使用它不必限定
enum
。。。在某些情况下,如果
enum
是如上所述嵌套的,则必须这样做


实际上,Java确实允许您将多个顶级类放入同一个源文件中,前提是除了一个类以外的所有类都是“包私有的”。然而,这样做通常被认为是不好的风格,它可能是一些工具链的问题。。。我听说了



1-如果你想知道代码作者选择这样做的真正原因,你需要问他们

我相信这是一个很好的答案,对于比我更高级的人来说是有意义的。但是你的代码比我目前知道的语法复杂得多。我在学习,不是专家。你同样可以使用简单的枚举:
public enum Const{VALUE1,VALUE2}
。但问题是,它们是类(有一些特殊性),所以它们被用作类;)这并不能回答所提出的问题。另请参见。