在某些情况下,异常流控制是否更好?

Chi*_*may 3 java enums

有许多文章解释了为什么应该避免异常流控制并被认为是反模式.但是,在以下示例中使用异常流量控制是否有意义?

例如:我有一个包含许多值的枚举类型,需要检查它是否包含给定的字符串.

使用Enum.valueof的解决方案将抛出IllegalArgumentException并可用于返回false.甚至Apache commons lang3 lib也使用相同的.我们在所有后续调用中重用一次延迟初始化的enumConstantDirectory映射.

return EnumUtils.isValidEnum(MyEnum.class, myValue);
Run Code Online (Sandbox Code Playgroud)

其他解决方案是迭代.

return Stream.of(MyEnum.values()).anyMatch(e -> e.name().equals(value));
Run Code Online (Sandbox Code Playgroud)

Gho*_*ica 7

编程总是在"非正式标准"之间进行平衡,并且在有意义的情况下偏离规则.

是的,Java是你"在你跳跃之前看"的语言之一(你检查条件); 不像你在"请求宽恕"的Python(不是许可).

换句话说:大多数时候,Java程序员会发现查看使用控制流异常的代码会令人惊讶.但是:这并不意味着一个人永远不应该这样工作.

我个人两分钱在这里:我认为你应该依赖异常,因为那个案例表明你的程序中有一个真正的例外情况.含义:当你检查的那些字符串应该表示枚举常量时...而异常可能没什么问题.但是当在运行时有一定的机会(甚至可能是"有效"的原因)字符串无效时,我宁愿使用一种方法,boolean isValid()而不是抛出异常.