这是一个简化的例子。我有这个枚举声明如下:有没有办法在候选列表中测试枚举值? (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的基准测试,以确保我没有公司你的表现受到打击。 –