0
我想在Java中編寫一個類似於JavaScript的回調系統,我在做的是我通過網絡發送信息時有一個「回調ID」附加到它。當客戶端從服務器接收到這些數據時,它應該爲該集合的回調定位一個集合,並將其與檢索到的數據進行調用。在Java中的回調,類似於Javascript
下面是當前的系統我已經寫了,而要達到這一點:
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);
}
}
與此相關的問題我甚至在嘗試運行代碼之前就已經注意到,思考了一會兒,並且跑出了一些需要思考的問題。可調用類不接受參數。因此,例如,說我想通過一個方法,像下面這樣的回調:
僞
method(param JSONObject data) {
print data
}
授予此方法不會每次它被稱爲時間是一樣的,所以它將在飛行中創建。在我想要實現的JavaScript的例子可以發現如下:
什麼,我想
(function caller() {
called(function(data) {
console.log("Data: " + data);
});
})();
function called(callback) {
callback(Math.random());
}