可以使用lambda表示作为函数的枚举的实现吗?

时间:2014-10-31 00:24:23

标签: java enums lambda 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();
        }
    }
}

我希望能够将其编码为lambda,类似于(但不编译):

enum CaseLambda implements Function<Object, String> {
    UPPER (o -> o.toString().toUpperCase()),
    LOWER (o -> o.toString().toLowerCase())
}

我尝试了一些括号等的变体,但没有编译。

是否有一种语法允许将枚举实例声明声明为lambda?

1 个答案:

答案 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);
    }
}