以下是代码,其中一行中,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
应该被声明为最终的,但根据this answer ,这样就好了??
最佳答案
如 Why are only final variables accessible in anonymous class? 中所述,在匿名类中只能访问最终变量。
在您的代码中,您会收到 getFullNameCallback
作为 getFullName
方法中的参数(它不是创建 ValueEventListener
新实例的代码内的局部变量)。
此外,您在匿名类ValueEventListener
内部使用它(getFullNameCallback
),因此,getFullNameCallback
必须是final
才能使用(同样,在链接的帖子中解释了原因)。
关于java - Firebase回调接口(interface)需要声明为final吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56126522/