【问题标题】:Calling Interface Method Without Specifying The Class Implementing The Interface调用接口方法而不指定实现接口的类
【发布时间】:2017-09-01 16:30:36
【问题描述】:

我想调用一个接口方法,以便它在实现该接口的类中执行。我知道我可以创建该类的一个对象来调用该方法,但是有没有办法只进行一次调用,然后任何实现该接口的类都会执行该方法?就像 iOS 中的协议一样。

例如,对于所有 Firebase 操作,我都有这个类,并且在每次操作之后,我想向发出调用的任何类发送成功消息。

这是接口类:

      public interface MemberNoteSend {
          public void doneSendNote(String msg);
      }

这是实现接口的类之一:

public class CoachFragment extends Fragment  implements MemberNoteSend {

这是一个类中处理 Firebase 操作的方法:

    public static void sendNoteToMember(String userKey, String note, String source){

    databaseRef.child(Constants.NODE_USERS)
               .child(userKey)
               .child(Constants.NODE_NOTES)
               .push()
               .setValue(noteObj).addOnCompleteListener(new OnCompleteListener<Void>() {
        @Override
        public void onComplete(@NonNull Task<Void> task) {
            CoachFragment cf = new CoachFragment(); // I DON'T WANT THIS OBJECT
            if(task.isSuccessful()) {
                cf.doneSendNote("Note sent");
            }else{
                cf.doneSendNote("Error");
            }
        }
    });
}

我不想创建 CoachFragment 类的对象,因为可以从多个活动片段调用此方法。我对实现此功能的其他方法持开放态度。

【问题讨论】:

  • “实现接口的任何类都会执行方法”哪个实现,JRE如何决定哪一个?

标签: java android firebase interface


【解决方案1】:

在每次操作后,我想向拨打电话的任何班级发送成功消息。

所以它不是任何。这样做的正确方法(恕我直言)是使用类似的东西:

public static void sendNoteToMember(final MemberNoteSend sender, String userKey, String note, String source) {
    // ...
    if (task.isSuccessful()) {
        sender.doneSendNote("Note sent");
        // ...

【讨论】:

    猜你喜欢
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-20
    • 2011-05-16
    • 2014-03-13
    相关资源
    最近更新 更多