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

时间:2013-01-21 01:49:53

标签: java enums multiple-files

为什么在自己的文件中声明此枚举。这有优势吗?我怎么能把它放在2个文件中的一个。我真的不知道我在做什么。请以简单的方式解释这一点,因为这是一本教科书示例,而且我对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;
    }
}

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

3 个答案:

答案 0 :(得分:24)

  

为什么在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;
    }
    ...
}

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

但是这里发生的事情与如果enum是普通班级会发生什么没什么不同。 (并且枚举是隐式静态的,因此我们不需要static关键字...)


  

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

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

  

这有优势吗?

是。这意味着不必限定enum使用它......在某些情况下,如果enum嵌套在上面,则必须使用它。


实际上,Java确实允许您将多个顶级类放入相同的源文件中,只要其中一个类是“包私有”的。然而,这样做通常被认为是不好的风格,对某些工具链来说可能会有问题......我听说过。

答案 1 :(得分: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; }
}

还要考虑:

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

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

答案 2 :(得分:4)

enumclass,遵循相同的规定。

将它放在自己的文件上就像在一个单独的文件中移动一个内部类一样,不多也不少。所以是的,你可以在其中一个类中移动它,并且能够使用OuterClass.ScaleName语法从外部访问它。