Java 在方法中添加枚举

标签 java enums

我需要修改第三个方法mapDirectionToTrafficProfileDirection()以显示BothDirection 类是一个枚举类,只有 IN 和 OUT

public enum Direction {
IN,
OUT;

TrafficProfileExtension类还具有方向枚举Egress、Ingress、Both;

public class TrafficProfileExtension {
private TrafficProfile entity;
public static enum Direction {
    Egress, Ingress, Both;
}

我需要修改第三个方法来显示 Both 有没有办法可以在不更改/添加 Direction 类中新枚举的情况下添加它?

private TrafficProfileExtension.Direction mapDirectionToTrafficProfileDirection (Direction direction){
    if (Direction.OUT.equals(direction)){
        return TrafficProfileExtension.Direction.Egress;
    }
    if (Direction.IN.equals(direction)){
        return TrafficProfileExtension.Direction.Ingress;
    }
    if (Direction. ??  .equals(direction)){
        return TrafficProfileExtension.Direction.Both;
    }
    return null;
}
    }

我们的代码中有这个方法,他们能够在不更改 Direction 类中的枚举的情况下添加枚举。 示例方法如下:

private  List<Direction> mapTrafficProfileDirection (TrafficProfileExtension.Direction direction)  throws  Exception  {

    List<Direction>  directionList = new ArrayList<Direction>();

    if (TrafficProfileExtension.Direction.Egress.equals(direction)){
        directionList.add(Direction.OUT);
        return directionList;
    }
    if (TrafficProfileExtension.Direction.Ingress.equals(direction)){
        directionList.add(Direction.IN);
        return directionList;
    }
    if (TrafficProfileExtension.Direction.Both.equals(direction)){
        directionList.add(Direction.OUT);
        directionList.add(Direction.IN);
        return directionList;

    }

    throw new Exception("Illegal direction passed through method " + direction.name());

}

最佳答案

作为特殊情况,您可以使用 null 调用该方法。

if (direction == null){
    return TrafficProfileExtension.Direction.Both;
}

但这并不是一个非常干净的解决方案,因为 null 通常意味着“没有方向”。

<小时/>

所以,看来您已经在使用列表从 Direction 映射到 TrafficProfileExtension.Direction,那么为什么不使用列表来映射另一个方向呢?

private TrafficProfileExtension.Direction mapDirectionToTrafficProfileDirection(List<Direction> directionList) {

    if(directionList.contains(Direction.IN) && directionList.contains(Direction.OUT)){
        return TrafficProfileExtension.Direction.Both;
    }
    if (directionList.contains(Direction.IN)){
        return TrafficProfileExtension.Direction.Ingress;
    }
    if (directionList.contains(Direction.OUT)){
        return TrafficProfileExtension.Direction.Egress;
    }
    return null;
}

关于Java 在方法中添加枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32590158/

相关文章:

ios - 我如何在字符串支持的枚举数组上使用字符串函数?

java - Servlet/Undertow - 访问 HttpServletRequest 和 HttpServletResponse

java - 在 Android Studio 中连接到数据库的基本 URL

java - 无法让 OkHttp 的 response.body.toString() 返回字符串

php - 在不创建依赖项的情况下避免魔数(Magic Number)

c - 在 C 中重新定义枚举/全局枚举值

java - 消息消费者在第一条消息后被阻止

java - JUnit 测试在 Eclipse 中通过但在 Maven Surefire 中失败

scala - 烫金比较连续记录

C# 如何在类中使用 get、set 和使用枚举