【发布时间】:2012-08-02 16:54:12
【问题描述】:
我有两种枚举类型(并且希望用户能够添加自己的)。
enum PhoneSensor { A, B };
enum RobotSensor { A, C };
如果我不在采用枚举类型的方法中使用 Enum 属性,这将正常工作。
public <E extends Enum<E>> void registerSensor(E e) {
System.out.print(e);
}
但是,如果我希望将模板 E 识别为枚举(用于此处的开关),我会得到 错误“无法打开 E 类型的值。” (在 Eclipse 中,switch(e) 中的 'e' 带有红色下划线)
public <E extends Enum<E>> void registerSensor(EnumSet<E> eSet) {
for (E e : eSet) {
System.out.print("value is ");
// Cannot switch on a value of type E.
// Only convertible int values or enum variables are permitted
switch(e) {
case PhoneSensor.A:
System.out.print(e);
default:
return;
}
}
}
我对擦除有一点了解,它会在编译时清除有关模板的任何信息,所以这就是问题所在。但是我在传递 Class clazz 或实现接口方面的尝试没有奏效。有什么好的解决方案?
【问题讨论】:
标签: java generics parameters enums switch-statement