2012-03-13 18 views
5

Supongamos que hay un ENUMenumeración como operación aritmética

enum Operations { 
    ADD, 
    SUBTRACT, 
    MULTIPLY 
} 

quiero usar esta enumeración para sumar dos números (por ejemplo 5 y 3) y obtener la salida como 8 o quiero usar esta enumeración para restar dos números (digamos 9 y 3) y obtener la salida como 6

pregunta:

  • es esto posible?
  • si es así, ¿cuáles son las modificaciones que se deben hacer en esta enumeración?

Respuesta

17

enum s pueden tener métodos abstractos, y cada miembro puede poner en práctica de manera diferente.

enum Operations { 
    ADD { 
    public double apply(double a, double b) { return a + b; } 
    }, 
    SUBTRACT { 
    public double apply(double a, double b) { return a - b; } 
    }, 
    MULTIPLY { 
    public double apply(double a, double b) { return a * b; } 
    }, 
    ; 

    public abstract double apply(double a, double b); 
} 

le permitirá hacer

Operations op = ...; 
double result = op.apply(3, 5); 
+2

respuesta muy buena, +1. – Perception

4

Se puede utilizar un interruptor en el valor de enumeración:

switch (operator) { 
case ADD: 
    ret = a + b; 
    break; 
case SUBTRACT: 
    ret = a - b; 
    break; 
case MULTIPLY: 
    ret = a * b; 
    break; 
} 
1

Se debe utilizar la enumeración como una bandera para lo operación a realizar:

public int computeOperation(int leftOperand, Operation op, int rightOperand) { 
    switch(op) { 
     case ADD: 
      return leftOperand + rightOperand; 
     case SUBTRACT: 
      return leftOperand - rightOperand; 
     case MULTIPLY: 
      return leftOperand * rightOperand; 
    } 

    return null; 

Puesto que usted está volviendo para cada caso, no necesita preocuparse por fracasar.

4

Cómo sobre el uso de JAVA 8 dispone de:

enum Operation implements DoubleBinaryOperator { 
    PLUS ("+", (l, r) -> l + r), 
    MINUS ("-", (l, r) -> l - r), 
    MULTIPLY("*", (l, r) -> l * r), 
    DIVIDE ("/", (l, r) -> l/r); 

    private final String symbol; 
    private final DoubleBinaryOperator binaryOperator; 

    private Operation(final String symbol, final DoubleBinaryOperator binaryOperator) { 
     this.symbol = symbol; 
     this.binaryOperator = binaryOperator; 
    } 

    public String getSymbol() { 
     return symbol; 
    } 

    @Override 
    public double applyAsDouble(final double left, final double right) { 
     return binaryOperator.applyAsDouble(left, right); 
    } 
} 
Cuestiones relacionadas