【发布时间】:2014-10-31 00:24:23
【问题描述】:
假设我想创建一组相关的函数并将它们分组到一个枚举中。
我可以编码,例如:
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 的语法?
【问题讨论】:
-
我很好奇编译错误是什么。
-
在枚举中声明一个
Function<Object, String>字段,将其传递给构造函数,然后像在第二个sn-p 中那样调用构造函数对你有用吗?还是样板太多了? -
@yshavit 这就是我认为他在第二次 sn-p 中尝试做的事情。 (也许我的假设是错误的。)
-
在 Java 8 中将
Functions 包装在枚举中的point 没有那么多。该实现非常聪明,可以提取一个单例 lambda,而不是每个都重新生成它引用它的时间,因此您不妨将 lambdas 直接插入到您使用它们的地方。 -
@LouisWasserman 但我希望使用枚举向开发人员展示有意义的函数列表(即强类型一组受支持的功能)的好处,并且我也在迭代它们并在特定情况下应用所有功能。