[英]What is the best way to write two enum classes containing common functionality
[英]In Java, what is the best way to share functionality between enum value?
我正在考虑在枚举值之间创建通用功能的最佳方法,这些值实现枚举中声明的抽象方法。
例如,我想共享由VALUE1
和VALUE2
定义的方法的第一行:
public enum EnumExample {
VALUE1() {
public void doSomething(String arg) {
doSomethingElse(); // I don't want to repeat this line
calculateFoo();
},
VALUE2() {
public void doSomething(String arg) {
doSomethingElse(); // I don't want to repeat this line
calculateBar();
}
},
VALUE3() {
public void doSomething(String arg) {
doSomethingUnrelated(); // This value DOES NOT share functionality with VALUE1 & VALUE2
}
};
public abstract void doSomething(String arg);
}
目前,我只为每个值重复执行代码,但是我敢肯定有更好的方法。
任何帮助都感激不尽!
我不确定这是否对您更好,但是对于这种情况,我喜欢使用lambda。 我让enum
实现一个功能接口,然后每个值都可以委托给自己的私有实现。
import java.util.function.Consumer;
public enum EnumExample implements Consumer<String> {
VALUE1(t -> {
doSomethingElse();
calculateFoo();
}),
VALUE2(t -> {
doSomethingElse();
calculateFoo();
}),
VALUE3(t -> doSomethingUnrelated());
private final Consumer<String> myLambda;
EnumExample(Consumer<String> aLambda) {
myLambda = aLambda;
}
static void doSomethingElse() {}
static void calculateFoo() {}
static void doSomethingUnrelated() {}
@Override
public void accept(String t) {
myLambda.accept(t);
}
}
它仍然重复您的方法调用,但是在我看来,它看起来更干净。
您可以在“基本枚举类”上实现“泛型”操作,并将特定操作定义为抽象,因此必须实现:
enum EnumExample {
VALUE1 {
@Override
void doSomethingSpecific() {
System.out.println("specific for " + VALUE1);
}
},
VALUE2 {
@Override
void doSomethingSpecific() {
System.out.println("specific for" + VALUE2);
}
};
public void doSomething(){
doSomethingGeneric();
doSomethingSpecific();
}
void doSomethingGeneric(){
System.out.println("Same for all enums...");
};
abstract void doSomethingSpecific();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.