我設計了一個通用的方法,來讀取枚舉值/寫設置爲BigInteger的在數組中的枚舉enumConstants中的位置,是否對應於枚舉的序數值?
我原來的執行
public static <T extends Enum<T>> Set<T> asList(BigInteger integer, Class<T> targetClass) {
Set<T> enums = new HashSet<T>();
// Step 0. Sanity check
if (targetClass == null || integer == null || !targetClass.isEnum())
return enums;
// Step 1. Checking each value of target class
T[] values = targetClass.getEnumConstants();
for (int i = 0; i < values.length; i++) {
if (integer.testBit(i))
enums.add(values[i]);
}
// Step 3. Returning final enums
return enums;
}
不過,我切換到:
public static <T extends Enum<T>> Set<T> asSet(BigInteger integer, Class<T> targetClass) {
Set<T> enums = new HashSet<T>();
// Step 0. Sanity check
if (targetClass == null || integer == null || !targetClass.isEnum())
return enums;
// Step 1. Checking each value of target class
T[] values = targetClass.getEnumConstants();
for (int i = 0; i < values.length; i++) {
T value = values[i];
if (integer.testBit(value.ordinal()))
enums.add(value);
}
// Step 3. Returning final enums
return enums;
}
我這樣做由於Enum在文檔中的描述:
* Returns the ordinal of this enumeration constant (its position
* in its enum declaration, where the initial constant is assigned
* an ordinal of zero).
所以基本上,第一個值可能不總是0.
在哪些情況下,或者哪些JVM的枚舉初始值不是0?
你如何從「初始常量分配零序數」到「初始值可能不總是0」? – 2013-05-09 05:55:30
誤讀它。現在我看到了我的錯誤。 – mavarazy 2013-05-12 05:49:21