我有这段代码:
public void FbShare(JSONObject parameters) {
if (Session.getActiveSession() == null || !Session.getActiveSession().isOpened()) {
Session.StatusCallback callback = new Session.StatusCallback() {
@Override
public void call(Session session, SessionState state, Exception exception) {
if (state.isOpened()) {
publishFeedDialog(parameters); // <--- HERE
}
}
};
Session.openActiveSession(this, true, callback);
} else {
publishFeedDialog(parameters);
}
}
为什么parameters
来电无法访问publishFeedDialog(parameters)
?
答案 0 :(得分:4)
尝试让这个论点最终:
public void FbShare(final JSONObject parameters) {
答案 1 :(得分:4)
将parameters
参数设置为final
:
public void FbShare(final JSONObject parameters) {
//...
}
有关正在发生的事情的概述,请参阅:
答案 2 :(得分:2)
将第一行更改为
public void FbShare(final JSONObject parameters) {
答案 3 :(得分:1)
编译器错误消息告诉您需要知道的一切,如果您可以解密它:
Cannot refer to the non-final local variable parameters in an enclosing scope
也就是说,封闭范围中的变量parameters
不是final
,因此无法引用它。
要解决此问题,请将其设为final
:
public void FbShare(final JSONObject parameters) {
Java不够聪明,无法跟踪parameters
引用的内容,除非您使用final
来保证它始终指向同一个对象。
如果你指的是一个不是方法参数的局部变量,这同样适用:
public void foo() {
final String bar = ...;
Callback callback = new Callback() {
void invoke() {
something(bar);
}
};
答案 4 :(得分:0)
使您的参数成为最终参数,以便可以在您的匿名类中使用。