gpt4 book ai didi

Java 最终匿名类与垃圾收集器

转载 作者:行者123 更新时间:2023-12-02 10:30:32 25 4
gpt4 key购买 nike

我的问题是当作为参数传递给异步回调时我们应该如何使用匿名类?例如,如果我有以下代码:

interface MyListener {
void onSucces(String requestedAction, JSONObject response);
void onError(String requestedAction, JSONObject response, int statusCode);
};

interface CallbackInterface {
void onResponse(String requestedAction, JSONObject response, int statusCode);
};

void doAsyncJob(String action, CallbackInterface callbackItf);


void makeJob(String action, final MyListener listener) {
doAsyncJob(action, new CallbackInterface {
void onResponse(String requestedAction, JSONObject response, int statusCode) {
if (statusCode == 200) {
listener.onSucces(requestedAction, response);
} else {
listener.onError(requestedAction, response, statusCose);
}
}
});
}


for(i = 1; i < 1000; i++) {
makeJob("Action_" + i, new MyListener{
void onSucces(String requestedAction, JSONObject response) {
//process response
}
void onError(String requestedAction, JSONObject response, int statusCode) {
//process error
});
}

通过每次分配稍后使用的新监听器(MyListener)来循环调用“makeJob”“onResponse”,这个监听器可以成为垃圾收集器的资格吗?是否需要保留对此监听器的一个引用,以确保稍后在“onResponse”中使用时尚未被垃圾处理?

最佳答案

当没有其他对象引用对象时,对象就有资格进行垃圾回收。

就您而言,MyListener对象被传递到 makeJob,然后由 CallbackInterface 引用它们。对象。请注意,引用不需要是 CallbackInterface 中显式声明的成员变量。 (实际上,java运行时生成一个并复制引用)。

所以只要CallbackInterface对象存在,其关联 MyListener不会被垃圾收集。这意味着只要 doAsyncJob 保留对 CallbackInterface 的引用只要作业正在运行,那么MyListener将始终可用。

关于Java 最终匿名类与垃圾收集器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53642163/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com