これは単純化された例です。私はこの列挙型宣言を次のように持っています:
public enum ELogLevel {
None,
Debug,
Info,
Error
}
私は別のクラスにこのコードを持っています:
if ((CLog._logLevel == ELogLevel.Info) || (CLog._logLevel == ELogLevel.Debug) || (CLog._logLevel == ELogLevel.Error)) {
System.out.println(formatMessage(message));
}
私の質問は、テストを短縮する方法があるかどうかです。理想的には、(これはPascal / Delphiから借用しています)の曲に何かをしたいと思います:
if (CLog._logLevel in [ELogLevel.Info, ELogLevel.Debug, ELogLevel.Error])
比較の長いリストの代わりに。Javaにはそのようなものがありますか、それともそれを達成する方法がありますか?私は簡単な例を使用しています。パターンがあるかどうかを調べて、さらに多くの要素の列挙値リストを使用してこれらのタイプのテストを実行できるようにすることを目的としています。
編集: EnumSetは私が欲しいものに最も近いもののようです。それを実装するナイーブな方法は、次のようなものを介して行われます。
if (EnumSet.of(ELogLevel.Info, ELogLevel.Debug, ELogLevel.Error).contains(CLog._logLevel))
しかし、ベンチマークでは、これは長いif / thenステートメントよりも2桁遅く実行されます。これは、EnumSetが実行されるたびにインスタンス化されるためだと思います。これは非常に頻繁に実行されるコードでのみ問題になりますが、それでも非常に小さな問題です。1億回以上の反復で、ボックスの7ミリ秒と450ミリ秒について話しているからです。いずれにせよ、ごくわずかな時間です。
非常に頻繁に実行されるコードについて私が決めたのは、静的変数でEnumSetを事前にインスタンス化し、そのインスタンスをループで使用することです。これにより、ランタイムが1億回の反復ではるかに快適な9ミリ秒に短縮されます。
勝者がいるようです!迅速な返信をありがとうございます。