我有一个常量列表,想检查传递给方法的值是否等于其中一个常量。我知道枚举很好,但出于性能原因,我在这里需要一个 int 值。枚举值可以有值,但恐怕获取 int 值比直接使用 int 慢。
public static final int
a = Integer.parseInt("1"), // parseInt is necessary in my application
b = Integer.parseInt("2"),
c = Integer.parseInt("3");
public void doIt(int param) {
checkIfDefined(param);
...
}
问题是关于 checkIfDefined
的。我可以使用 if
:
if(param == a)
return;
if(param == b)
return;
if(param == c)
return
throw new IllegalArgumentException("not defined");
或者我可以使用 Arrays.binarySearch(int[] a, int key)
,或者……还有更好的主意吗?
也许枚举不仅在优雅方面而且在速度方面都更好,因为我不需要运行时检查。
解决方案
由于无论是 enum
还是 switch
在我使用 parseInt
的特殊情况下都有效,所以我将普通的旧 int 常量与 数组一起使用。二进制搜索
现在。
最佳答案
你更喜欢使用枚举吗:
public enum Letters {
A("1"), B("2"), C("3");
private final String value;
private Letters(String value) {
this.value = value;
}
public Letters getByValue(String value) {
for (Letters letter : values()) {
if (letter.value.equals(value)) return letter;
}
throw new IllegalArgumentException("Letter #" + value + " doesn't exist");
}
public int toInt() {
return Integer.parseInt(value);
}
}
关于java - 如何检查参数值是否在常量列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2311469/