下面是代码,其中一行是android studio要求我声明为最终
public void getFullName(GetFullNameCallback getFullNameCallback) { usersRef.child(mAuth.getUid()).child("fN").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
getFullNameCallback.onCallback(dataSnapshot.getValue().toString());
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {}
});
}
private interface GetFullNameCallback {
void onCallback(String fullName);
}
在getFullNameCallback.onCallback()
中的onDataChange
处,用红色下划线标明了getFullNameCallback
应该声明为final,但根据this answer来说,这还好吗? >
答案 0 :(得分:0)
如Why are only final variables accessible in anonymous class?中所述,在匿名类内部只能访问最终变量。
在您的代码中,您会收到getFullNameCallback
作为getFullName
方法中的参数(它不是代码内的局部变量,它会创建ValueEventListener
的新实例)。
此外,您在匿名类getFullNameCallback
的内部(em {em} 中使用它(ValueEventListener
),因此getFullNameCallback
必须是final
才能使用(再次在链接的帖子中说明了原因)。