按输入度数返回 Direction 实例,如果没有则为空可选

问题描述 投票:0回答:1

伙计们。我有一个枚举类,其中包含方向和学位值。使用“ofDegrees”方法,如果输入度数与方向度数匹配,则必须返回具有字段名称(例如:SW)的 Direction 对象,如果不匹配则返回空可选。

我尝试将度数输入转换为对象,然后检查输入和枚举值之间是否相等。

public enum Direction {
N(0), NE(45), E(90), SE(135), S(180), SW(225), W(270), NW(315);

Direction(final int degrees) {
    this.degrees = degrees;
}

private int degrees;

public static Direction ofDegrees(int degrees) {
    Optional<Integer> opt = Optional.ofNullable(degrees);
    Direction direction = null;
    if(opt.isPresent()) {
        Object obj = Integer.valueOf(degrees);
        for(Direction dir : Direction.values()) {
            if(dir == obj) {
                direction = dir;
            }
        }
    }
    return direction;        
}

}

在每种情况下,我得到的结果都是“null”。我无法理解的另一件事是,当我无法从可选转换为方向时,如何返回空可选?

提前谢谢。

java enums
1个回答
0
投票

你混合了非可选输入参数和可选返回,然后你将 Direction 对象与可选进行比较 - 它们永远不会相等,可能你需要这样的东西:

public static Optional<Direction> ofDegrees(int degrees) {
    for (Direction dir : Direction.values()) {
        if (dir.degrees == degrees) {
            return Optional.of(dir);
        }
    }
    return Optional.empty();
}
© www.soinside.com 2019 - 2024. All rights reserved.