我一直在审查 JavaRegex
库,惊讶于Pattern
该类没有多年来我认为理所当然的公共构造函数。
我怀疑使用静态compile
方法来支持构造函数的一个原因可能是构造函数总是会返回一个新对象,而静态方法可能会返回先前创建的(和缓存的)对象,前提是模式字符串是相同的。
但是,如下所示,情况并非如此。
public class PatternCompiler {
public static void main(String[] args) {
Pattern first = Pattern.compile(".");
Pattern second = Pattern.compile(".");
if (first == second) {
System.out.println("The same object has been reused!");
} else {
System.out.println("Why not just use constructor?");
}
}
}
在构造函数上使用静态方法背后还有其他强有力的理由吗?
编辑:我在这里找到了一个相关的问题。那里的答案也没有让我信服。通读所有答案,我感觉静态方法在创建对象方面比公共构造函数有很多优势,但反之则不然。真的吗?如果是这样,我将为我的每个类创建这样的静态方法,并安全地假设它更具可读性和灵活性。