我无法将接口添加到groovy枚举。
示例:
interface DeviceType.groovy
public interface DeviceType{
public String getDevice()
}
enum Device.groovy
public enum Devices implements DeviceType {
PHONE{
public String getDevice(){
return "PHONE"
}
}, ALARM {
public String getDevice(){
return "ALARM"
}
}
}
简单测试
public class MainTest(){
public static void main(String [] args) {
System.out.println(Devices.PHONE.getDevice());
//should print phone
}
}
这是伪代码,但是一个很好的例子。 当我在Groovy中使用它时,我从IntelliJ得到一个错误,我需要将接口抽象化。 如果我把它抽象化,maven就不会编译说它不能是静态的和最终的。
任何提示?
答案 0 :(得分:2)
您需要在枚举中定义getDevice()。然后你可以覆盖它,如下所示:
enum Device.groovy
public enum Devices implements DeviceType {
PHONE{
public String getDevice(){
return "PHONE"
}
}, ALARM {
public String getDevice(){
return "ALARM"
}
};
public String getDevice(){
throw new UnsupportedOperationException();
}
}
答案 1 :(得分:1)
由于枚举是一个类,并且您的类正在实现该接口,因此需要实现该功能。现在你所拥有的是一个不实现该函数的枚举,其实例是每个具有相同名称功能的子类。但由于枚举本身没有它,这还不够好。
我想提供我喜欢的语法,例如:
public enum Devices implements DeviceType {
PHONE("PHONE"), ALARM("ALARM")
private final String devName
public String getDevice() { return devName }
private Devices(devName) { this.devName = devName }
}
或者,如果“设备”始终与枚举实例的名称匹配,您可能只返回:
public enum Devices implements DeviceType {
PHONE, ALARM
public String getDevice() { return name() }
}