我認識的Java 8仍處於測試階段,但這個讓我覺得奇怪:的Java 8需要鑄造,而Java 7沒有 - enum.getClass/getDeclaringClass
public class Fields<C extends Enum<C>> {
public Fields(Set<C> columns) {
// A sample column used to find the universe of the enum of Columns.
C sampleCol = columns.iterator().next();
// Java 8 needs a cast here.
Set<C> allColumns = EnumSet.allOf((/*Class<C>)*/ sampleCol.getClass());
// ... there's more to this that I've deleted.
}
}
錯誤讀取:
error: incompatible types: inferred type does not conform to equality constraint(s)
Set<C> allColumns = EnumSet.allOf(sampleCol.getClass());
inferred: C
equality constraints(s): C,CAP#1
where C is a type-variable:
C extends Enum<C> declared in class Test.Fields
where CAP#1 is a fresh type-variable:
CAP#1 extends Enum from capture of ? extends Enum
這是Java 8的一個缺陷還是一個新特性?
我試過用Java 7(51)和Java 8(b128),並且在這兩種情況下編譯器都需要強制轉換,當然兩種情況下仍然處於警告狀態。但是,當我移除鑄件時,在兩種情況下都會出現錯誤(Java 7,8)。我在IDEA 13環境中嘗試了它。 –