Java枚举方法-返回反向枚举

我想声明一个枚举方向,它有一个返回相反方向的方法(以下语法不正确,即枚举无法实例化,但它说明了我的观点)。这在Java中可能吗

代码如下:

公共枚举方向{
北区(1),
南部(-1),
东(-2),
西(2);
方向(整数代码){
这个。代码=代码;
}
受保护的整数码;
公共int getCode(){
返回此.code;
}
静态方向相反方向(方向d){
返回新方向(d.getCode()*-1);
}
}

对于那些被标题吸引的人:是的,你可以在你的枚举中定义你自己的方法。如果您想知道如何调用这样的非静态方法,那么您可以使用与任何其他非静态方法相同的方法来调用它——在定义或继承该方法的类型的实例上调用它。在枚举的情况下,这些实例只是ENUM\u常量s

所以您只需要EnumType.ENUM\u CONSTANT.methodName(参数)


现在让我们从问题回到问题。解决办法之一是

公共枚举方向{
北、南、东、西;
私人方向相反;
静止的{
北对=南;
南。对=北;
东方。相反=西方;
西对=东;
}
公共方向getOppositeDirection(){
反向返回;
}
}

现在Direction.NORTH.getOppositeDirection()将返回Direction.SOUTH


这里有一种更“黑”的方式来说明@jedwards注释,但它不像第一种方式那样灵活,因为添加更多字段或更改它们的顺序会破坏我们的代码

公共枚举方向{
北、东、南、西;
//缓存值以避免每次调用方法时重新创建这样的数组
私有静态最终方向[]值=值();
公共方向getOppositeDirection(){
返回值[(序号()+2)%4];
}
}

发表评论