Подтвердить что ты не робот

Почему enum объявлен в отдельном файле на Java?

Почему это перечисление объявлено в собственном файле. Есть ли преимущество? Также как я могу поместить это в один из двух файлов. Я действительно не понимаю, что я делаю. Пожалуйста, также объясните это простым способом, так как это пример учебника, и я довольно новичок в Java.

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

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

Ответ 1

Почему enum объявлен в отдельном файле на 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 в класс верхнего уровня заключается в том, что теперь вам нужно квалифицировать имя перечисления, когда вы используете его в другом классе.

Но то, что здесь происходит, ничем не отличается от того, что произойдет, если enum был обычным классом. (И перечисление неявно статично, поэтому нам не нужно ключевое слово static...)


Почему это перечисление объявлено в собственном файле.

Потому что автор кода решил сделать это таким образом.

Есть ли преимущества для этого?

Да. Это означает, что не нужно квалифицировать enum, чтобы использовать его... в некоторых случаях, когда вам нужно было бы, если enum был вложен, как указано выше.


Фактически, Java позволяет вам помещать несколько классов верхнего уровня в один и тот же исходный файл, при условии, что все, кроме одного класса, являются "приватными пакетами". Тем не менее, это обычно считается плохим стилем, и это может быть проблематично для некоторых цепей инструментов... Я слышал.

Ответ 2

Перечисления - это не просто голые значения в 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);

И вы можете объединить их обоих. Они очень мощные инструменты.

Ответ 3

An enum является class и следует тем же правилам.

Наличие в своем собственном файле в точности как перемещение внутреннего класса в отдельный файл, не более или менее. Итак, да, вы можете переместить его внутри одного класса и иметь доступ к нему извне с синтаксисом OuterClass.ScaleName.