java - 调用接口(interface)方法而不指定实现接口(interface)的类

标签 java android firebase interface

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

例如,我为所有 Firebase 操作提供了此类,并且在每次操作之后,我想向进行调用的任何类发送一条成功消息。

这是接口(interface)类:

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

这是实现该接口(interface)的类之一:

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 类的对象,因为可以从多个 Activity fragment 调用此方法。我愿意接受其他方式来实现此功能。

最佳答案

after each operation I'd like to send a message of success to whatever class made the call.

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

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

关于java - 调用接口(interface)方法而不指定实现接口(interface)的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46004500/

相关文章:

Android:使用背景图像缩放按钮

android - 如何在Android中将不安全的HttpClient传递给Volley请求

swift - 将图片上传到 Firebase 存储并显示为个人资料图片

javascript - 退出 firebase 身份验证

Android 设置 OnClick 不工作/对话框不出现

java - 在 DAWG 而不是 Trie 上使用 Aho-Corasick

java - 退役 jar 的替代解决方案

java - 使用 Hadoop Jar 的垃圾收集信息

c++ - 添加 CURLOPT_TIMEOUT_MS curl 后不发送任何内容

java - 无法为最终变量赋值 'weekTotalDaylyMinutes'