【发布时间】:2013-05-15 12:28:17
【问题描述】:
如何将外部匿名类 ref 传递给 Java 内部匿名类中的方法?
我有一个异步调用服务器的方法 - sendCall(some_args, callback)。回调由匿名类(我们将其命名为OuterAnon)表示,并包含一个失败案例的方法。在此方法中,会创建一个消息框,并且每次按下 OK 按钮时都会调用 sendCall()。所以我需要再次将OuterAnon 传递给该方法。
这是一个代码来说明我的意思:
private void sendCall(MyData data, OuterAnon<Boolean> callback){/*...*/}
private void myCall(final MyData data) {
sendCall(data, new OuterAnon<Boolean>() {
public void onFailure(Throwable throwable) {
final OuterAnon<Boolean> callback = this; //how to avoid this?
MessageBox.show(throwable.getMessage(), new MessageListener() {
public void process(MessageBox.OnClick action) {
if (action == MessageBox.OnClick.OK) {
sendCall(new MyData("resend?"), callback);
}
}
});
}
}
});
}
正如你所注意到的,我在这里为回调取一个 ref:
final OuterAnon<Boolean> callback = this;
在这里使用它:
sendCall(new MyData("resend?"), callback);
但我想避免创建引用并传递回调,例如:
sendCall(new MyData("resend?"), this); //at the moment we point to MessageListener instead of OuterAnon.
有什么方法可以在 Java 中实现吗?
【问题讨论】:
-
因为这里的外部类也是匿名的所以我认为没有办法做到这一点,如果外部类有一些名字那么它可以用
.this -
@Krushna,尝试使用
OuterAnon.this访问它会导致错误:“OuterAnon 不是封闭类”
标签: java oop scope anonymous-class anonymous-inner-class