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

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)

  • 请注意,此模式的某些方面已在[此问题](http://stackoverflow.com/q/23361418/2711488)中讨论过...... (2认同)