匿名内部类调用方法参数,方法参数对象变了,匿名内部类的引用却没变
public void startServer(final LanServerBean.Builder builder){
Log.i(TAG, "quqx_startServer: builder="+builder.hashCode());
HttpServerRequestCallback callback = new HttpServerRequestCallback() {
@Override
public void onRequest(AsyncHttpServerRequest request, AsyncHttpServerResponse response) {
Log.e(TAG, "quqx_onRequest: builer=" + builder.hashCode());
......
}
};
mHttpServer.get("/", callback);
......
}
问题:如上代码,第一次调用startServer()方法,两个log显示builder的对象是一致的,之后再调用该方法,打印显示builder的对象不一致,quqx_onRequest处的打印一直是第一次引用的对象。
分析:callback是接口的实现类,是由mHttpServer持有,当mHttpServer不变的时候,callback里的内容就的不会变。
解决方法:
public void startServer(final LanServerBean.Builder builder){
Log.i(TAG, "quqx_startServer: builder="+builder.hashCode());
HttpServerRequestCallback callback = new HttpServerRequestCallback() {
@Override
public void onRequest(AsyncHttpServerRequest request, AsyncHttpServerResponse response) {
Log.e(TAG, "quqx_onRequest: builer=" + builder.hashCode());
......
}
};
mHttpServer = new AsyncHttpServer(); //新new一个对象解决问题
mHttpServer.get("/", callback);
......
}