Firebase回调接口需要声明为最终的吗?

时间:2019-05-14 09:00:09

标签: java firebase firebase-realtime-database final anonymous-class

下面是代码,其中一行是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来说,这还好吗? >

1 个答案:

答案 0 :(得分:0)

Why are only final variables accessible in anonymous class?中所述,在匿名类内部只能访问最终变量

在您的代码中,您会收到getFullNameCallback作为getFullName方法中的参数(它不是代码内的局部变量,它会创建ValueEventListener的新实例)。

此外,您在匿名类getFullNameCallback的内部(em {em} 中使用它(ValueEventListener),因此getFullNameCallback必须是final才能使用(再次在链接的帖子中说明了原因)。