对于那些被标题吸引到这里的人:是的,你can在枚举中定义您自己的方法。
如果您想知道如何调用自己的非静态枚举方法,您可以按照与任何其他非静态方法相同的方式进行操作 - 您可以在instance定义/继承此类方法的类型。
对于枚举来说,这种情况很简单ENUM_VALUE
他们自己。
所以你需要的是YourEnum.YOUR_ENUM_VALUE.yourMethod(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;
}
}
Now Direction.NORTH.getOppositeDirection()
将返回Direction.SOUTH
.
这是更“hacky”的方式来说明@jedwards 评论但它感觉不像第一种方法那么灵活,因为添加更多字段或更改它们的顺序会破坏我们的代码。
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];
}
}