是否可以使用lambda表示一个函数enum的实现?
问题描述:
假设我想要创建一组相关的函数并想将它们组合到一个枚举中。是否可以使用lambda表示一个函数enum的实现?
我可以代码,只需例如:
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?
答
不,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);
}
}
我很好奇编译错误是什么。 – Radiodef 2014-10-31 00:26:44
你可以在枚举中声明一个'Function
@yshavit这就是我认为他正在尝试做的第二个片段。 (也许我的假设是错误的,但是。) – Radiodef 2014-10-31 00:28:45