假设我想创建一组相关的函数,并希望将它们分组为枚举。
我可以编码,例如:
enum Case implements Function<Object, String> {
UPPER {
public String apply(Object o) {
return o.toString().toUpperCase();
}
},
LOWER {
public String apply(Object o) {
return o.toString().toLowerCase();
}
}
}
我希望能够将其编码为lambda,类似于(但不编译):
enum CaseLambda implements Function<Object, String> {
UPPER (o -> o.toString().toUpperCase()),
LOWER (o -> o.toString().toLowerCase())
}
我尝试了一些括号等的变体,但没有编译。
是否有一种语法允许将枚举实例声明声明为lambda?
答案 0 :(得分:14)
不,enum
constant syntax不允许。如果使用正文声明常量,则该正文为classbody
。
yshavit's suggestion似乎合适。委派Function
实施。
enum Case implements Function<Object, String> {
UPPER (o -> o.toString().toUpperCase()),
LOWER (o -> o.toString().toLowerCase());
private final Function<Object, String> func;
private Case(Function<Object, String> func) {
this.func = func;
}
@Override
public String apply(Object t) {
return func.apply(t);
}
}