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

新手上路,请多包涵

为什么这个枚举在它自己的文件中声明。这有什么好处吗?另外我怎么能把它放在 2 个文件之一中。我真的不知道我在做什么。也请用简单的方式解释一下,因为这是一个教科书示例,而且我对 Java 还很陌生。

秤名.java

 enum ScaleName {celsius, fahrenheit, kelvin, rankine};

温度.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;
    }
}

使用温度.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;
    }
}

原文由 user1943931 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 400
2 个回答

为什么枚举在单独的文件中声明,在 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 关键字。请参阅 JLS 8.9 。)


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

因为代码作者选择这样做1 。

这有什么好处吗?

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


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


1 - 如果你想知道教科书的作者选择那样做的 真正 原因,你需要问他们!

原文由 Stephen C 发布,翻译遵循 CC BY-SA 4.0 许可协议

枚举不仅仅是 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; }
}

还请考虑:

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

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

原文由 fge 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题