伙计们。我有一个枚举类,其中包含方向和学位值。使用“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”。我无法理解的另一件事是,当我无法从可选转换为方向时,如何返回空可选?
提前谢谢。
你混合了非可选输入参数和可选返回,然后你将 Direction 对象与可选进行比较 - 它们永远不会相等,可能你需要这样的东西:
public static Optional<Direction> ofDegrees(int degrees) {
for (Direction dir : Direction.values()) {
if (dir.degrees == degrees) {
return Optional.of(dir);
}
}
return Optional.empty();
}