如何将此代码转换为java8 lambda

时间:2015-01-18 19:12:55

标签: java java-8

我刚开始使用Java 8而且我正在努力使用这段代码:

paramsValues[idx++] = new ReplyMessage<JsonObject>() {
    @Override
    public void reply(JsonObject reply) {
        message.reply(reply);
    }
};

如何将其转换为Lambda样式?

3 个答案:

答案 0 :(得分:4)

如果ReplyMessage功能界面,则可以执行

paramsValues[idx++] = reply -> message.reply(reply);

以下是您问题中其他类的存根实现的完整示例:

// Stub classes
class JsonObject { }

@FunctionalInterface
interface ReplyMessage<T> {
    void reply(T jo);
}

class LambdaDemo {
    public static void main(String args[]) {

        // Dummy variables
        ReplyMessage<JsonObject> message = new ReplyMessage<JsonObject>() {
            public void reply(JsonObject jo) {}
        };
        ReplyMessage[] paramsValues = new ReplyMessage[5];
        int idx = 0;

        // Your code, lambdafied
        paramsValues[idx++] = reply -> message.reply(reply);

        // Or,
        // paramsValues[idx++] = message::reply;

        // But then you could perhaps do with just ...
        // paramsValues[idx++] = message;
    }
}

答案 1 :(得分:1)

Lambda表达式仅适用于 Functional Interfaces (只有一种方法的接口,例如 Runnable ActionEvent

如果ReplyMessage是功能界面,您可以执行以下操作:

paramsValues[idx++] = reply -> message.reply(reply);

Lambda表达式以这种模式形成:方法应该采用的参数,然后->然后是方法体

以下是ReplyMessage界面应如何显示的代码:

@FunctionalInterface
interface ReplyMessage<T> {
    void reply(T jo);
}

有关详情,请参阅阅读this

答案 2 :(得分:0)

paramValues[idx++] = reply -> message.reply(reply);

或者

paramValues[idx++] = reply -> {
    return message.reply(reply);
}

只要ReplyMessage<JsonObject>是功能接口并且paramValues属于ReplyMessage<JsonObject>类型,它就会起作用。