這是一個簡化的例子。我有這個枚舉聲明如下:有沒有辦法在候選列表中測試枚舉值? (Java)
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));
}
我的問題是,如果有一種方法可以縮短測試。我非常希望somethign 200英鎊(這是由帕斯卡爾/德爾福借來的):
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語句,我猜是因爲EnumSet被實例化每次運行時長慢兩個數量級。這個問題只針對運行頻率很高的代碼,即使這樣,它也是一個很小的問題,因爲我們正在談論的是超過100M的迭代,我的盒子上是7ms vs 450ms;兩種方式的時間都非常短。
我在經常運行的代碼中解決的問題是在靜態變量中預先實例化EnumSet,並在循環中使用該實例,該實例在100M迭代中將運行時間減少到更可口的9ms 。
所以看起來我們有一個贏家!謝謝你們的快速回復。
謝謝,看看我的問題編輯一些使用EnumSet的基準測試,以確保我沒有公司你的表現受到打擊。 –