我有两种枚举类型(并希望用户能够添加自己的)。
enum PhoneSensor { A, B };
enum RobotSensor { A, C };
如果我不在接受枚举类型的方法中使用枚举属性,这就很好。
public <E extends Enum<E>> void registerSensor(E e) {
System.out.print(e);
}
但是,如果我希望模板E被识别为一个枚举(在这里的开关中使用),我会得到错误“不能打开类型E的值”(在Eclipse中,开关(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;
}
}
}
我对擦除有一点了解,它在编译时擦除了关于模板的所有信息,所以这就是问题所在。但是我尝试传入clazz类或者实现一个接口都没有成功。对此有什么好的解决办法?
问题是你只能打开一种已知的类型。
在您的情况下,您正试图在多种可能的类型之间切换,这本身就是有缺陷的。(如何期望用户在此处添加到您的代码中?)
你需要的是一个界面
interface Sensor {
void sense();
}
enum PhoneSensor implements Sensor {
A, B;
@Override
public void sense() {
System.out.println(this);
}
}
public <E extends Enum<E> & Sensor> void registerSensor(EnumSet<E> eSet) {
for (E e : eSet) {
System.out.print("value is ");
e.sense();
}
}
通过这种方式,用户可以添加任何实现 Sensor 的枚举,他们可以做任何他们想做的事情,而不必更改你的代码。
本文向大家介绍Java语言中枚举能使用switch语句吗?,包括了Java语言中枚举能使用switch语句吗?的使用技巧和注意事项,需要的朋友参考一下 Java中的枚举(enum)是一种存储一组常量值的数据类型。您可以使用枚举来存储固定值,例如一周中的天,一年中的月等。 您还可以使用自定义值定义一个枚举来声明常量。但是您需要一个实例变量,一个构造函数和一个getter方法来返回值。 与switch
问题内容: 为什么下面的代码: 给出错误: 在循环外继续 问题答案: 失败是switch语句的标准行为,因此,在switch语句中使用Continue没有意义。Continue语句仅在for / while / do..while循环中使用。 根据我对您意图的理解,您可能想写: 我还建议您将默认条件放在最后。 编辑:continue语句不能在switch语句中使用并不完全正确。(带有理想标记的)
首先,我要说明我对C#中的枚举更加熟悉,而Java中的枚举似乎是一团糟。 正如您所看到的,我试图在下一个示例中使用switch语句@enums,但无论我在做什么,我总是得到一个错误。 我收到的错误是: 限定的大小写标签必须替换为限定的枚举常量 问题是我很理解这个错误,但我不能只写VALUE_A,因为枚举位于另一个子类中。有没有办法解决这个问题?为什么会发生在Java?
本文向大家介绍Java枚举类型在switch语句正确使用方法详解,包括了Java枚举类型在switch语句正确使用方法详解的使用技巧和注意事项,需要的朋友参考一下 很多人也许会尝试写下这样的代码: 正确的写法: 如果需要根据类型的名称返回枚举实例,可以在枚举类中加入方法 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
它在两个case语句上都显示错误“case表达式必须是常量表达式”。 那么我如何在swtich语句中使用字符串枚举呢?