Enum == vs switch(一项)
Enum == vs switch (one item)
注意:我正在做一些事情来测试这个,我只是觉得在我开始之前看到别人有答案是个好主意。
假设需要实现以下接口方法(其中 Operation
在 enum
中)
public boolean supportsOperation(Operation op)
很明显,如果class支持多个操作,你就用switch,如果class根本不支持操作,你return错误的。我的问题是:
如果 class 只支持一种类型的 Operation
,那么 and/or 更快地实现 return op == Operation.SomeOperation
之类的方法或使用类似的方法会更好吗:
switch (op){
case SomeOperation:
return true;
default:
return false;
}
我确实注意到,当给定 null
时,第一个 returns false,第二个抛出 NullPointerException
.
更好 是意见,但是 更快 是可以回答的:它们 完全 是一样的.编译器完全有能力进行此类微不足道的优化(并且 JIT 获得第二遍以进行更多优化)。您应该将时间花在更有成效的事情上(例如实施您的操作)。
此外,如果你还想进一步研究这个话题(好),我建议你至少观看What has my compiler done for me lately and play with gcc.godbolt.org。
注意:我正在做一些事情来测试这个,我只是觉得在我开始之前看到别人有答案是个好主意。
假设需要实现以下接口方法(其中 Operation
在 enum
中)
public boolean supportsOperation(Operation op)
很明显,如果class支持多个操作,你就用switch,如果class根本不支持操作,你return错误的。我的问题是:
如果 class 只支持一种类型的 Operation
,那么 and/or 更快地实现 return op == Operation.SomeOperation
之类的方法或使用类似的方法会更好吗:
switch (op){
case SomeOperation:
return true;
default:
return false;
}
我确实注意到,当给定 null
时,第一个 returns false,第二个抛出 NullPointerException
.
更好 是意见,但是 更快 是可以回答的:它们 完全 是一样的.编译器完全有能力进行此类微不足道的优化(并且 JIT 获得第二遍以进行更多优化)。您应该将时间花在更有成效的事情上(例如实施您的操作)。
此外,如果你还想进一步研究这个话题(好),我建议你至少观看What has my compiler done for me lately and play with gcc.godbolt.org。