匿名内部クラスがメソッドパラメーターを呼び出し、メソッドパラメーターオブジェクトは変更されましたが、匿名内部クラス参照は変更されていません
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()メソッドが初めて呼び出され、2つのログがビルダーのオブジェクトが同じであることを示しています。次に、メソッドが呼び出されると、印刷によりビルダーのオブジェクトが不整合であることが示されます。quqx_onRequestでの印刷は常に最初に参照されるオブジェクトです。
分析:コールバックは、mHttpServerによって保持されるインターフェースの実装クラスです。mHttpServerが変更されていない場合、コールバックの内容は変更されません。
解決:
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);
......
}