【发布时间】:2020-04-06 05:00:22
【问题描述】:
我想检查一下我在此处使用 Optional 是否违反了良好做法。
public Move getChoice() {
Optional<Move> move = Optional.empty();
while (!move.isPresent()) {
System.out.println("Enter move code : R => Rock, P => Paper, S => Scissors");
move = Move.fromMnemonic(consoleReader.readPlayerInput());
}
return move.get();
}
public enum Move
{
ROCK('R'), PAPER('P'), SCISSORS('S');
private final char mnemonic;
public static Move[] values = values();
Move(char mnemonic) {
this.mnemonic = mnemonic;
}
public static Optional<Move> fromMnemonic(char playerInput) {
return Arrays.stream(values).filter(v -> v.mnemonic == playerInput).findFirst();
}
}
我的目标是避免创建另一个 Enum 'UNKOWN' 实例。 我读到使用 Optional.isPresent 和 Optional.get 是不好的做法。但是我找不到使用其他函数(如 Optional.ifPresent 或 Optinal.map)的任何方法,因为如果结果还无效,我必须循环。
谢谢。
【问题讨论】:
-
“我读到使用 Optional.isPresent 和 Optional.get 是不好的做法” ????有参考吗?
-
恕我直言,这太僵化了。
isPresent()和get()是低级的,通常更好地被其他方法替换;并非总是如此。 -
@OleV.V.你的意思是在这种情况下,那些低级的方法是可以接受的?
-
我还在努力下定决心。 :-) 意思是你可以,而且不明显是否存在更好的解决方案,具体取决于口味。
-
我投票结束这个问题,因为它属于Code Review
标签: java oop java-8 null optional