java - Firebase回调接口(interface)需要声明为final吗?

标签 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);
      }

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/

相关文章:

java - 尝试使用 Intent 获取字符串时,.child() 未设置

javascript - 如何删除 firebase 中的值

java - 如何将Stanford nlp中的CoreDocument保存到磁盘

java - arraylist 返回随机数而不是正确的数据

java - 在 Eclipse 中使用 servlet API

android - firebase_crashlytics_collection_enabled 在新的 Firebase Crashlytics SDK 中不起作用

java - 根据不同布局中的条目检查 editText 条目

android - 运行 Flutter 身份验证时出现黑屏

Firebase 云功能部署 - 无效的内存属性

javascript - OrderByChild、equalTo 和 limitToFirst 查询加载整个数据库