我正在考虑在枚举值之间创建通用功能的最佳方法,它实现了在枚举中声明的抽象方法。
例如,我想分享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);
}
目前,我只是重复每个值的代码,但我确信有更好的方法 任何帮助都感激不尽!
答案 0 :(得分:0)
我不确定这对你来说是否更好,但我喜欢lambdas这种情况。我使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);
}
}
它仍然重复你的方法调用,但它看起来更干净。
答案 1 :(得分:-1)
您可以实施&#34; generic&#34; &#34; base enum class&#34;并将具体操作定义为抽象,因此必须实现:
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();
}