如何将此代码转换为 java8 lambda
How to convert this code to java8 lambda
我刚刚开始使用 Java 8,但我正在为这个代码片段而苦苦挣扎:
paramsValues[idx++] = new ReplyMessage<JsonObject>() {
@Override
public void reply(JsonObject reply) {
message.reply(reply);
}
};
如何将其转换为 Lambda 样式?
如果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;
}
}
Lambda 表达式仅适用于 Functional Interfaces(只有一种方法的接口,例如 Runnable 或 ActionEvent
)
如果ReplyMessage
是一个函数式接口,你可以这样做:
paramsValues[idx++] = reply -> message.reply(reply);
Lambda 表达式以这种模式形成:方法应该采用的参数,然后是 ->
然后是方法主体
下面是 ReplyMessage
界面的代码:
@FunctionalInterface
interface ReplyMessage<T> {
void reply(T jo);
}
有关详细信息,请考虑阅读 this。
paramValues[idx++] = reply -> message.reply(reply);
或者
paramValues[idx++] = reply -> {
return message.reply(reply);
}
只要 ReplyMessage<JsonObject>
是函数式接口并且 paramValues 是 ReplyMessage<JsonObject>
类型,它就可以工作。
我刚刚开始使用 Java 8,但我正在为这个代码片段而苦苦挣扎:
paramsValues[idx++] = new ReplyMessage<JsonObject>() {
@Override
public void reply(JsonObject reply) {
message.reply(reply);
}
};
如何将其转换为 Lambda 样式?
如果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;
}
}
Lambda 表达式仅适用于 Functional Interfaces(只有一种方法的接口,例如 Runnable 或 ActionEvent
)
如果ReplyMessage
是一个函数式接口,你可以这样做:
paramsValues[idx++] = reply -> message.reply(reply);
Lambda 表达式以这种模式形成:方法应该采用的参数,然后是 ->
然后是方法主体
下面是 ReplyMessage
界面的代码:
@FunctionalInterface
interface ReplyMessage<T> {
void reply(T jo);
}
有关详细信息,请考虑阅读 this。
paramValues[idx++] = reply -> message.reply(reply);
或者
paramValues[idx++] = reply -> {
return message.reply(reply);
}
只要 ReplyMessage<JsonObject>
是函数式接口并且 paramValues 是 ReplyMessage<JsonObject>
类型,它就可以工作。