我試圖創建一個enum
類的集合,以便我可以遍歷集合,然後通過調用enumClass.getEnumConstants()
來遍歷枚舉值。集合或可變參數中的通用枚舉
考慮以下幾點:
public interface MyEnumType {
String getSubtype();
}
public enum MyEnumTypeA implements MyEnumType {
A_1,
A_2;
public String getSubtype() { return "A"; }
}
public enum MyEnumTypeB implements MyEnumType {
B_1,
B_2;
public String getSubtype() { return "B"; }
}
我一直在使用可變參數的嘗試:
private <T extends Enum<T> & MyEnumType> void handleTypes (
Class<? extends T>... enumTypes)
{
for(Class<? extends T> enumType : enumTypes)
for(T value : enumType.getEnumConstants())
handleValue(value);
}
private void doStuff() {
// error here
handleTypes(MyEnumTypeA.class, MyEnumTypeB.class);
}
...但在可變參數使用外卡的仿製藥,每當我試圖調用產生一個編譯錯誤功能
我還試圖建立一個List
:
public class MyMainClass
{
private static Collection<Class<Enum<? extends MyEnumType>>> ALL_TYPES
= Lists.newArrayList();
{
// error here
ALL_TYPES.add(MyEnumTypeA.class);
ALL_TYPES.add(MyEnumTypeB.class);
}
}
...但是當我嘗試將add
添加到列表中時,這也無法編譯。
下工作,但需要投(沒有編譯錯誤或警告,如果我在Object.class
通過):
private void runNoMatchTests (Class... enumTypes) {
for(Class enumType : enumTypes) {
for(MyEnumType value : ((Class<MyEnumType>)enumType).getEnumConstants()) {
handleValue(value);
}
}
}
這怎麼能不使用強制做什麼?它可以在沒有使用演員的情況下完成嗎?
Java不提前知道時間的任何亞型'MyEnumType'實際上是一個枚舉。 –
什麼是'handleValue'?你在哪裏得到編譯錯誤? –
@SotiriosDelimanolis'handleValue'只是一些處理'MyEnumType'對象的隨機函數,它可以像System.out.println(value.getSubtype());'一樣簡單。 –