小编典典
对于那些按标题吸引的人:是的,您可以在枚举中定义自己的方法。如果您想知道如何调用这种非静态方法,则可以使用与其他任何非静态方法相同的方法-
在定义或继承该方法的类型实例上调用它。如果是枚举,则此类实例仅为ENUM_CONSTANTs。
因此,您所需要做的就是EnumType.ENUM_CONSTANT.methodName(arguments)。
现在让我们从问题回到问题。解决方案之一可能是
public enum Direction {
NORTH, SOUTH, EAST, WEST;
private Direction opposite;
static {
NORTH.opposite = SOUTH;
SOUTH.opposite = NORTH;
EAST.opposite = WEST;
WEST.opposite = EAST;
}
public Direction getOppositeDirection() {
return opposite;
}
}
现在Direction.NORTH.getOppositeDirection()将返回Direction.SOUTH。
这是说明@jedwards注释的更多“
hacky”方法,但是它不如第一种方法灵活,因为添加更多字段或更改其顺序将破坏我们的代码。
public enum Direction {
NORTH, EAST, SOUTH, WEST;
// cached values to avoid recreating such array each time method is called
private static final Direction[] VALUES = values();
public Direction getOppositeDirection() {
return VALUES[(ordinal() + 2) % 4];
}
}
2020-09-09