假设我有一个旨在实例化的类.我在类中有几个私有的"帮助器"方法,它们不需要访问任何类成员,并且只对它们的参数进行操作,返回结果.
public class Example {
private Something member;
public double compute() {
double total = 0;
total += computeOne(member);
total += computeMore(member);
return total;
}
private double computeOne(Something arg) { ... }
private double computeMore(Something arg) {... }
}
Run Code Online (Sandbox Code Playgroud)
有没有特别的理由指定computeOne和computeMore作为静态方法 - 或任何特殊原因不?
将它们保持为非静态是最容易的,即使它们肯定是静态的而不会引起任何问题.
您如何看待使用私有静态方法?
就个人而言,我更喜欢使用静态私有方法来进行非静态,只要它不需要访问任何实例字段.
但我听说这种做法违反了OOP原则.
编辑:我想从风格的角度来看,而不是表现.
我看过以下讨论:
如果私有辅助方法可以是静态的,那么它们应该是静态的吗?如果它们的类没有成员变量,
那么所有方法都应该是静态的
似乎人们通常会接受静态方法,但对此有点怀疑,原因如下:
最可接受的静态方法是私有静态方法.但那么为什么存在静态方法,在什么情况下它们是首先被采用的?
另外,静态方法比实例方法有任何性能优势吗?
我最近遇到了以下内容:http://www.cafeaulait.org/course/week4/22.html:
方法何时应该是静态的?
- 既不读取也不写入实例字段
- 独立于对象的状态
- 接受参数的数学方法,将算法应用于这些参数,并返回值
- 用于代替构造函数的工厂方法
我对Stack Overflow社区的反馈非常感兴趣.
我和我合作过的人发生过争吵,这真的让我烦恼.如果你有一个只有calculateRiskor或和方法calculatePrice的类,那么这个类是不可变的并且没有成员变量,那么这些方法应该是静态的,这样就不必每次都创建一个类的实例.我使用以下示例:
public class CalcService {
public int calcPrice(Trade trade, Date date) {
...
}
public double calcRisk(Trade trace, Date date) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
这些方法应该是static吗?