Java中的回调,类似于Javascript
我试图用Java编写一个回调系统,它的工作原理与Javascripts类似,我所做的是通过网络发送信息,并附加一个“回调id”。当客户机从服务器接收到此数据时,它应该从集合中找到该id的回调,并使用检索到的数据调用它 以下是我在尝试实现这一目标时编写的当前系统:Java中的回调,类似于Javascript,java,callback,Java,Callback,我试图用Java编写一个回调系统,它的工作原理与Javascripts类似,我所做的是通过网络发送信息,并附加一个“回调id”。当客户机从服务器接收到此数据时,它应该从集合中找到该id的回调,并使用检索到的数据调用它 以下是我在尝试实现这一目标时编写的当前系统: public class NetworkCallback { private int id; private Callable callback; public NetworkCallback(Callab
public class NetworkCallback {
private int id;
private Callable callback;
public NetworkCallback(Callable callback) {
this.callback = callback;
}
public NetworkCallback setId(int id) {
this.id = id;
return this;
}
public int getId() {
return id;
}
public boolean execute(JSONObject data) {
try {
callback.call(); // data?
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
}
它们存储在一个特殊的容器中,该容器创建后将保留索引,它基本上只是一个带有一些助手类的数组。当客户端获得信息后,它将搜索回调,然后执行回调
void onMessageReceived(byte[] data) {
JSONObject json = JSONHelper.fromByteArray(data);
int callbackId = json.getInt("cbid");
if(callbackId != 0) {
callbacks.fetch(callbackId).execute(json);
}
}
我甚至在尝试运行代码之前就注意到了这个问题,思考了一会儿,没有什么东西可以考虑了。可调用类不接受参数。例如,假设我想将一个方法作为回调传递,如下所示:
psuedo
method(param JSONObject data) {
print data
}
假设这个方法不是每次调用时都是一样的,所以它会被动态创建。下面是我试图实现的javascript示例:
我想要的Javascript示例
(function caller() {
called(function(data) {
console.log("Data: " + data);
});
})();
function called(callback) {
callback(Math.random());
}
您将需要为此使用一个。使用者基本上是一个对象,您可以在其上调用执行回调的accept(data)
例如:
public class Test {
public static void main(String[] args) {
Consumer consumer = new Consumer() {
@Override
public void accept(Object o) {
System.out.println(o.toString());
}
};
new Test().doSomething("Test", consumer);
}
public void doSomething(Object data, Consumer<Object> cb) {
cb.accept(data);
}
}
公共类测试{
公共静态void main(字符串[]args){
消费者=新消费者(){
@凌驾
公共无效接受(对象o){
System.out.println(o.toString());
}
};
新测试().剂量测量(“测试”,消费者);
}
公共无效剂量测量(对象数据、消费者cb){
cb.接受(数据);
}
}
这将在控制台中打印“测试”