我想声明一个枚举Direction,它有一个返回相反方向的方法(下面的语法不正确,即枚举不能示例化,但它说明了我的观点).这在Java中可能吗?
下面是代码:
public enum Direction {
NORTH(1),
SOUTH(-1),
EAST(-2),
WEST(2);
Direction(int code){
this.code=code;
}
protected int code;
public int getCode() {
return this.code;
}
static Direction getOppositeDirection(Direction d){
return new Direction(d.getCode() * -1);
}
}
6条答案
按热度按时间mqkwyuun1#
对于那些被标题吸引到这里的人:是的,你***可以***在你的枚举中定义你自己的方法。
如果你想知道如何调用你自己的非静态枚举方法,你可以用和其他非静态方法一样的方法--在定义/继承这种方法的类型的 instance 上调用它。
在枚举的情况下,这样的示例只是
ENUM_VALUE
本身。所以你只需要
YourEnum.YOUR_ENUM_VALUE.yourMethod(arguments)
。现在让我们从问题回到问题上来,其中一个解决方案可能是
现在
Direction.NORTH.getOppositeDirection()
将返回Direction.SOUTH
。这里有一个更“hacky”的方式来说明@jedwards注解,但它感觉不如第一种方法灵活,因为添加更多字段或更改它们的顺序将破坏我们的代码。
nr7wwzry2#
对于这样的小枚举,我发现最可读的解决方案是:
z6psavjg3#
这是可行的:
x6yk4ghg4#
创建一个抽象方法,并让你的每个枚举值覆盖它。因为你在创建它的时候知道了相反的情况,所以没有必要动态地生成或创建它。
虽然读起来不太好也许
switch
会更容易管理?plupiseo5#
是的,我们一直都是这样做的,你返回的是一个静态的示例,而不是一个新的对象
jucafojl6#
枚举有一个静态值方法,该方法返回一个数组,该数组包含枚举的所有值(按声明顺序排列)。source
因为北得到1,东得到2,南得到3,西得到4;你可以创建一个简单的等式来得到相反的结果
(数值+2)% 4