【问题标题】:Firebase Callback Interface needs to be declared final?Firebase 回调接口需要声明为 final 吗?
【发布时间】:2019-05-14 09:00:08
【问题描述】:

以下是代码,其中一行是 android studio 要求我声明为 final

      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,这很好吗??

【问题讨论】:

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


【解决方案1】:

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

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

而且你使用它(getFullNameCallback匿名类ValueEventListener,所以,getFullNameCallback必须是final才能被使用(再次解释为什么在链接的帖子)。

【讨论】:

  • 好的...但是这是新的吗?因为来自stackoverflow.com/questions/47847694/… 他们没有将其声明为最终的
  • @wolfrevokcats 具体与 android 相关我不知道,抱歉。但总的来说,在 Java 中,据我所知这是这样工作的
猜你喜欢
  • 2011-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-16
  • 2016-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多