有很多文章解釋了爲什麼異常流量控制應避免與被認爲是一個反模式。但是,在以下示例中使用異常流控制是否有意義?在某些情況下,異常流量控制是否更好?
例如:我有一個枚舉類型有很多值,需要檢查它是否包含給定的字符串。
使用Enum.valueof的解決方案應該拋出一個IllegalArgumentException並且可以用來返回false。即使是Apache commons lang3 lib也使用相同的。我們在所有後續調用中重複使用一次lazy initialized enumConstantDirectory映射。
return EnumUtils.isValidEnum(MyEnum.class, myValue);
其他的解決方案是迭代。
return Stream.of(MyEnum.values()).anyMatch(e -> e.name().equals(value));
確實有很多這樣的文章,但所有這些文章的問題是,異常*是流量控制的一種形式。 Controll從投擲點轉移到捕捉點。這就是他們爲*所做的,而他們對其他形式的控制的優勢在於他們會接受一些數據 - 例外 - 與他們一起。編程決定應該基於邏輯,而不是無意義的教條。 – EJP