我刚开始使用Java 8而且我正在努力使用这段代码:
paramsValues[idx++] = new ReplyMessage<JsonObject>() {
@Override
public void reply(JsonObject reply) {
message.reply(reply);
}
};
如何将其转换为Lambda样式?
答案 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>
类型,它就会起作用。