Firebase 回调接口需要声明为 final 吗?
Firebase Callback Interface needs to be declared final?
以下是代码,其中一行 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);
}
在onDataChange
中的getFullNameCallback.onCallback()
处,它有红色下划线,因为它说getFullNameCallback
应该被声明为final,但根据,这很好??
如 Why are only final variables accessible in anonymous class? 中所述,在匿名 class.
中只能访问最终变量
在您的代码中,您收到 getFullNameCallback
作为 getFullName
方法中的参数(它不是创建 ValueEventListener
的新实例的代码中的局部变量)。
此外你使用它 (getFullNameCallback
) 在 匿名 class ValueEventListener
中,所以,getFullNameCallback
必须是 final
以便使用(再次,在链接 post 中解释了原因)。
以下是代码,其中一行 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);
}
在onDataChange
中的getFullNameCallback.onCallback()
处,它有红色下划线,因为它说getFullNameCallback
应该被声明为final,但根据
如 Why are only final variables accessible in anonymous class? 中所述,在匿名 class.
中只能访问最终变量在您的代码中,您收到 getFullNameCallback
作为 getFullName
方法中的参数(它不是创建 ValueEventListener
的新实例的代码中的局部变量)。
此外你使用它 (getFullNameCallback
) 在 匿名 class ValueEventListener
中,所以,getFullNameCallback
必须是 final
以便使用(再次,在链接 post 中解释了原因)。