Boh*_*ian 5 java lambda enums java-8
假设我想创建一组相关的函数,并希望将它们分组为枚举.
我可以编码,例如:
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我希望能够将其编码为lambda,类似于(但不编译):
enum CaseLambda implements Function<Object, String> {
UPPER (o -> o.toString().toUpperCase()),
LOWER (o -> o.toString().toLowerCase())
}
Run Code Online (Sandbox Code Playgroud)
我尝试了一些括号等的变化,但没有编译.
是否有一种语法允许将枚举实例的实现声明为lambda?
Sot*_*lis 14
不,enum常量语法不允许它.如果你用一个体来声明一个常量,那么这个体是一个classbody.
yshavit的建议似乎合适.委派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);
}
}
Run Code Online (Sandbox Code Playgroud)