
对于那些按标题吸引的人:是的,您可以在枚举中定义自己的方法。如果您想知道如何调用这种非静态方法,则可以使用与其他任何非静态方法相同的方法-
在定义或继承该方法的类型实例上调用它。如果是枚举,则此类实例仅为
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]; }}欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)