java - java中使用回调函数和直接调用静态函数有什么区别?

标签 java callback

我知道这个问题之前已经被问过。但我想从我的代码的角度理解其中的差异。

所以这是场景。

我有一个类 Main.java。该类调用不同的类 secondary.java 。在 Second 类中的特定方法上,我希望更新 Main 类中的一些值。有两种方法可以做到这一点。

1) 实现此目的的一种方法是通过 java 中的回调函数。
2)其次是如果我在主类中定义一个静态函数,然后从辅助类中调用该静态函数。

这是我的两种方法。

方法1

接口(interface)CallBack.java

   public Interface Callback{
       public void  updateValues();
    }

Main.java

 public class Main implements Callback {

        static int a=1;
        public static void main(String args[]) {

        Callback callback = new Main();
        Secondary obj = new Secondary(callback);
        obj.onClick();
    }

    public void updateValues(){
       a = 4;
    }

}

Secondary.java

 public class Secondary{

    private Callback callback;

    Secondary (Callback callback) {
    this.callback=callback;
     }    

    //On this method click, I want to update values in the Main class 
    public void onClick(){
        callback.updateValues();
    }
  }

方法 2

     public class Main {

            static int a=1;
            public static void main(String args[]) {

            Second obj = new Second();
            obj.onClick();
        }
        public static void updateValues(){
           a = 4;
        }
}
public class Secondary{

    Secondary () {
    //On this method click, I want to update values in the Main class
    public void onClick(){
        Main.updateValues();
    }

}

所以我只是想知道哪种方法更好?回调函数什么时候真正有用?

注意:这只是一个了解两个概念之间差异的示例。

最佳答案

哪种方法更好?答案总是取决于上下文,有些情况会违反所有规则。也就是说,保持低耦合、代码简单和单元测试是通常的优先事项。

static method
  pros:          simple, and direct
  disadvantages: the static method cannot be substituted with 
                 other implementations.    

callback approach
  pros: easy to substitute callbacks, good for mocking in tests
  cons: a little more overhead for the callback (although JVMs 
       can often optimise them out) and a little more conceptual 
       cost to developers; which will be low if they are not abused. 

从您选择的示例来看,我怀疑您正在开发 GUI。对于大型应用程序,静态方法方法不会在不变得脆弱的情况下进行扩展。因此,虽然您的应用程序很小,但您会发现静态方法方法简单且诱人。然而,随着您的应用程序的增长,并且您向项目添加了更多的人员,他们都需要对不断增长的代码库进行更改,同时我们需要隔离应用程序的各个部分并对这些部分进行单元测试的方法。这就是回调方法的亮点。

回调方法的危险在于它被过度使用。尽可能避免嵌套回调(函数世界中的一些模式使这是一项很棒的技术,但也许这是另一篇文章的内容)并且回调必须不知道调用者。循环依赖往往会使代码以非线性的速度变得复杂。

关于java - java中使用回调函数和直接调用静态函数有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26816084/

相关文章:

asp.net - ASP.NET客户端到服务器的通信

java - BMI 计算器,需要帮助修复清除按钮

java - 在 Java 中监视文件和目录的更改

java - 我对如何在我的代码中实现单例模式并让它调用我的对象类和方法感到困惑

java - Spring 启动 API

python - pyboard : Changing LED colour on USR button press

java - 旧实体版本上的 Spring Boot 引用

java - 通过单个类管理不同的 JavaFX 阶段

Delphi datasnap 回调 - 广播问题

javascript - 在node.js中正确使用这个内部回调函数