Java:不能在switch语句中使用泛型枚举
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java:不能在switch语句中使用泛型枚举,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1293字,纯文字阅读大概需要2分钟。
内容图文
我有两个枚举类型(并希望用户能够添加自己的).
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;
}
}
}
我对删除有一点了解,它在编译时消除了有关模板的任何信息,所以这就是问题所在.但是我尝试传递Class 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语句中使用泛型枚举所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。