例外フロー制御を避け、アンチパターンとみなす理由を説明する記事が多数あります。ただし、次の例では例外フロー制御の使用は意味がありますか?特定のシナリオで例外フロー制御を改善していますか?
例:多くの値を持つ列挙型があり、指定された文字列が含まれているかどうかを確認する必要があります。
Enum.valueofを使用するソリューションは、IllegalArgumentExceptionをスローし、falseを返すために使用できます。 Apacheでもlang3 libは同じものを使用しています。以降のすべての呼び出しで、1回の遅延の初期化されたenumConstantDirectoryマップを再利用します。
return EnumUtils.isValidEnum(MyEnum.class, myValue);
その他の解決方法があります。
return Stream.of(MyEnum.values()).anyMatch(e -> e.name().equals(value));
実際には多くの記事がありますが、すべての問題は例外がフロー制御の一形態であることです。 Controllはスローポイントからキャッチポイントに転送されます。それが彼らのためのものであり、他の制御方法に勝る優位性は、例外を除いてデータを取ることです。プログラミングの決定は、無意味なドグマではなく、論理に基づいて行われるべきである。 – EJP