我只想知道我是否定义了
public enum Op {-,+}
我可以选择其中一个并且像4 +Op[0] +3
这样的数学会返回1
而不是4-3
,但它也要求标识符
答案 0 :(得分:5)
enum
是class ( type)
中的一种特殊java
,它可以包含称为常量的实例字段以及方法。
定义常量名称的方式会违反规则以在java
中定义字段。
一个字段必须满足某些字符,包括a-z,A-Z,_(在得分下)。
因此,算术符号不允许作为常量名称。
其次,当你在这里调用4+Op[0]+3
时,你正在用加号(符号)连接操作数并期望一个整数值!它不是你在Java中可以期待的方式。它看起来像运算符重载..但Java不支持运算符重载。
在以下示例中,您可以根据需要重载Calculator.execute()
。
例如,要获得浮点结果,您可以执行以下操作:
public float execute(float a , Op op, float b ){
float f=0.0f;
// TODO
return f;}...
以下是您希望在java中实现的解决方案之一:
public class EnumTest
{
public static void main (String []args)
{
Calculator c=new Calculator();
int a=c.execute(4, Op.PLUS,3);
System.out.println("4 +Op.PLUS +3="+a);
a=c.execute(4, Op.MINUS, 3);
System.out.println("4 +Op.MINUS+3="+a);
// prints
// 4 +Op.PLUS +3=7
// 4 +Op.MINUS +3=1
}
}
enum Op{MINUS, PLUS,MULTIPLY,DIVIDE};
class Calculator
{
public int execute (int operandA, Op op, int operandB)
{
int a=0;
switch(op)
{
case MINUS:
a=operandA-operandB;
break;
case PLUS:
a=operandA+operandB;
break;
case MULTIPLY:
a=operandA*operandB;
break;
case DIVIDE:
if(operandB>0) // avoid devideByZero exception
a=operandA/operandB;
break;
}
return a;
}
}
答案 1 :(得分:1)
这是我能提出的最接近的:
enum Op implements IntBinaryOperator {
minus((i,j) -> i-j),plus((i,j) -> i+j);
@Override
public int applyAsInt(int left, int right) {
return op.applyAsInt(left, right);
}
final IntBinaryOperator op;
Op(IntBinaryOperator op) {
this.op = op;
}
}
像这样使用:
IntBinaryOperator op = Op.minus;
int one = op.applyAsInt(4,3);