我们知道static成员函数不需要类创建具体的实例就可以调用,它有点类似于namespace将类和方法联系在一起。那么什么情况下会考虑将一个private的成员函数设置成static呢?
主要考虑两点:
1.这个方法只能被这个类使用;
2.这个方法独立于这个类的内部状态。
在C++中,一个常用的case就是如果一个private方法是具有工具属性的方法,那就可以考虑设为static。
在Java中,常用的应用case是在类的构造函数中,有时需要调用一些方法来初始化immutable的成员变量。但是在构造函数中,对象还没创建完成,没法调用成员函数。这时就可以调用不依赖类的内部状态的private static方法来进行一些操作。
e.g.
public class MyClass{
private final String concatenated;
public MyClass(String a, String b){
concatenated = concat(a,b);
}
public String getConcatenated(){
return concatenated;
}
/**
* Concatenates two Strings as `s1---s2`
**/
private static final String concat(String s1, String s2){
return String.format("%s---%s", s1, s2);
}
}
参考链接:
https://stackoverflow.com/questions/6445927/what-is-the-use-of-private-static-member-functions
https://softwareengineering.stackexchange.com/questions/234412/why-have-private-static-methods