【问题标题】:How does placing a public method's implementation in a private method prevent disrupting consumers?将公共方法的实现放在私有方法中如何防止干扰消费者?
【发布时间】:2019-03-29 08:02:32
【问题描述】:

这个问题源于几个相关的问题,并且有点重新询问第一个似乎对 OP 的主要问题没有明确答案的问题:

我非常清楚私有方法的目的,但是我很难想到在私有方法中实现函数不会给 API 使用者带来问题的示例,而是将实现直接放在公共方法中将。这是 Java API 中的常见做法。

我基本上是在重新问上面的第一个问题,因为我没有阅读巩固我理解的答案。再举个例子:

public class Sum {

    private int sum(int a, int b){
        return a + b;
    }

    public int getSum(int a, int b){
        return sum(a, b);
    }

}

使用私有 sum 函数而不是直接将结果直接放入公共函数有什么好处?

public int getSum(int a, int b) {
    return a + b;
}

也许这不是最好的例子,但我也非常欢迎更复杂或真实世界的例子。

我再次了解,将实现放在私有方法中会隐藏实现并允许重用,总体而言,这是一种更好的做法,便于将来添加。然而,

  • 将它放在私有方法中如何能够扰乱 API 的使用者?
  • 是否应该以这种方式创建所有公共方法(始终将实现放在私有方法中),或者在哪里画线?

【问题讨论】:

  • 总和的例子似乎毫无意义。你有真实案例吗?
  • 如果您希望Sum 中的其他方法能够使用getSum 的原始实现,即使子类可以覆盖它,它也很有用。
  • 我没有真实的案例,这就是为什么我不理解破坏任何调用公共函数的代码的论点。总和示例可能过于简单,无法显示这一点,但没有实际示例是我问这个问题的原因。
  • 当我回顾 Java 的大多数数据结构实现时,例如 HashMap 和 LinkedList,被调用的私有方法通常只是为了重用而被分解出来。这就是为什么我对破坏调用者参数感到困惑的原因。

标签: java encapsulation private-methods public-method


【解决方案1】:

如您所示,将实现放在私有方法中没有任何区别。

我认为这个问题将“接口方法的实现”与“公共方法私有方法”之间的关系弄错了。

重要的是将接口与实现分开。消费者只看到界面。函数提供者选择/注入适当的实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    • 2014-09-09
    相关资源
    最近更新 更多