我知道这个问题之前已经被问过。但我想从我的代码的角度理解其中的差异。
所以这是场景。
我有一个类 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/