【发布时间】:2019-03-29 08:02:32
【问题描述】:
这个问题源于几个相关的问题,并且有点重新询问第一个似乎对 OP 的主要问题没有明确答案的问题:
- Private Methods Over Public Methods
- Why hide a class implementation?
- https://softwareengineering.stackexchange.com/questions/132019/what-is-the-value-in-hiding-the-details-through-abstractions-isnt-there-value
我非常清楚私有方法的目的,但是我很难想到在私有方法中实现函数不会给 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