@cawendish

Можно ли в перечислении делать какие-то вычисления?

Здравствуйте, у меня чисто школярный вопрос.
А можно ли в перечислении делать какие-то вычисления, или это антипаттерн?
Например, программа Калькулятор.
Создаю класс Calculator.
B перечисление Operation - операции +-*/
Если я в перечислении сделаю метод
count(double firstNumber, double secondNumber)?
И буду вызывать его из Calculator.
  • Вопрос задан
  • 70 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Java
Седой и строгий
Перечисление - это синтаксический сахар над обычным классом, так что нет никаких технических ограничений к тому, чтобы напихать в него логику. Кроме того, это бывает уместно и с архитектурных позиций. Джошуа Блоха в статье 30 шестой главы своего хрестоматийного труда "Effective Java" приводит несколько таких примеров. Один из них очень похож на ваш:
enum Operation {
    PLUS("+") {
        double apply(double x, double y) { return x + y; }
    },
    MINUS("-") {
        double apply(double x, double y) { return x - y; }
    },
    TIMES("*") {
        double apply(double x, double y) { return x * y; }
    },
    DIVIDE("/") {
        double apply(double x, double y) { return x / y; }
    };

    private final String symbol;

    Operation(String symbol) {
          this.symbol = symbol;
     }

    @Overrided 
    public String toString() {
          return symbol;
     }

    abstract double apply(double x, double y);
}

public class Example {
    public static void main(String[] args) {
        double x = Double.parseDouble(args[0]);
        double y = Double.parseDouble(args[1]);

        for (Operation op : Operation.values())
            System.out.printf("%f %s %f = %f%n", x, op, y, op.apply(x, y));
        }
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы