将java lambda转换为java 1.8之前的函数
我正在使用Babbler编写一个XMPP软客户端来进行负载测试 在API文档中,它提到添加侦听器以拦截传入消息。但是,示例代码是以lambda形式编写的将java lambda转换为java 1.8之前的函数,java,lambda,java-8,Java,Lambda,Java 8,我正在使用Babbler编写一个XMPP软客户端来进行负载测试 在API文档中,它提到添加侦听器以拦截传入消息。但是,示例代码是以lambda形式编写的 // Listen for messages xmppClient.addInboundMessageListener(e -> { Message message = e.getMessage(); // Handle inbound message. }); 我需要帮助将其转换为Java 1.7函数,因为我们的负载生
// Listen for messages
xmppClient.addInboundMessageListener(e -> {
Message message = e.getMessage();
// Handle inbound message.
});
我需要帮助将其转换为Java 1.7函数,因为我们的负载生成工具(nGrinder)不支持lambda语法。//侦听消息
// Listen for messages
xmppClient.addInboundMessageListener(new Consumer<MessageEvent>() {
public void accept(MessageEvent e) {
Message message = e.getMessage();
// Handle inbound message.
}
});
xmppClient.addInboundMessageListener(新消费者(){
公共无效接受(MessageEvent e){
Message Message=e.getMessage();
//处理入站消息。
}
});
通过将某个lambda函数存储在实例变量中,还可以避免每次调用该函数时创建新的使用者实例
private Consumer<MessageEvent> inboundMessageListener;
//should be called during startup only
public void initialize() {
inboundMessageListener = new Consumer<MessageEvent>() {
public void accept(MessageEvent e) {
Message message = e.getMessage();
// Handle inbound message.
}
};
}
//can be reused for more than one XMPP client, assuming there's no difference in handling different clients
public void addInboundMessageListener() {
xmppClient.addInboundMessageListener(inboundMessageListener);
}
私人消费者内置MessageListener;
//应仅在启动期间调用
公共无效初始化(){
inboundMessageListener=新消费者(){
公共无效接受(MessageEvent e){
Message Message=e.getMessage();
//处理入站消息。
}
};
}
//可以为多个XMPP客户机重用,前提是处理不同的客户机没有区别
public void addInboundMessageListener(){
xmppClient.addInboundMessageListener(inboundMessageListener);
}
这样的lambda只是[功能]接口匿名实现的简写。您始终可以自己实施“漫长的道路”:
//侦听消息
xmppClient.addInboundMessageListener(新消费者(){
@凌驾
公共无效接受(MessageEvent e){
Message Message=e.getMessage();
//处理入站消息。
}
});
阅读此平台提供的文档。有很好的参考价值。谢谢你。一旦我自由了,我会花时间把整个事情做完。同时,我需要一个快速而简练的解决方案。谢谢这正是我所需要的。添加实例变量注释非常有用,如果我接收到很多事件,它会加快速度。@jeffsia:这不会加快任何速度。接收事件时执行的代码完全相同。@霍尔格当然不会每次都调用initialize()
方法。这个片段只是一个示例。@Julio D:现在它更有意义了,尽管像这样的场景不太可能出现。请注意,这是如何将OP弄糊涂的,而它只是在多次将侦听器注册到源代码时才起作用。@Holger指出,这其实并不重要,因为我只想在一些测试中使用该代码段,而不考虑性能。
// Listen for messages
xmppClient.addInboundMessageListener(new Consumer<MessageEvent>() {
@Override
public void accept(MessageEvent e) {
Message message = e.getMessage();
// Handle inbound message.
}
});