我正在使用Parse.com作为后端处理Android应用程序。
Parse的Android SDK文档在section related to the Local datastore feature中包含以下代码:
ParseQuery<ParseObject> query = ParseQuery.getQuery("GameScore");
query.orderByDescending("score");
// Query for new results from the network.
query.findInBackground(new FindCallback<ParseObject>() {
public void done(List<ParseObject> scores, ParseException e) {
// Remove the previously cached results.
ParseObject.unpinAllInBackground("highScores", new DeleteCallback() {
public void done(ParseException e) {
// Cache the new results.
ParseObject.pinAllInBackground("highScores", scores);
}
});
}
});
但是,如果我在我的代码中尝试使用它,我会收到错误
不能引用内部类中的非最终变量分数 用不同的方法定义
在ParseObject.pinAllInBackground("highScores", scores);
我明白问题可能是什么,问题是如何解决它。
final List<ParseObject> localScores = scores
然后在pinAllInBackground
done
方法的签名更改为public void done(
最终 List<ParseObject> scores, ParseException e)
两种选择似乎都有效。
我想从经验丰富的Java开发人员那里得到答案,如果一个选项比另一个更好,为什么?
我个人对选项2的工作感到惊讶,但似乎final
修饰符并没有导致方法重载 - 这里我对Java的深入了解得到了很好的证明: - )
P.S。让我们不要理会官方文档包含非工作代码片段。
答案 0 :(得分:2)
它更喜欢选项2,因为它可以为您节省变量声明。
final
参数不会改变从调用者看到的方法签名(签名仅由 定义,方法名称及其形式参数的类型,见specification)。它仅用于实现所述方法,这意味着不能为变量分配新值。
在匿名内部类中使用它是必要的,因为Java不支持闭包。