【发布时间】:2012-12-07 07:28:05
【问题描述】:
我一直在审查 Java Regex 库,对 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?");
}
}
}
在构造函数上使用静态方法的任何其他强有力的理由?
编辑:我在这里找到了related question。那里的答案也没有让我信服。通读所有答案,我觉得静态方法在创建对象方面比公共构造函数有很多优势,但反之则不然。真的吗?如果是这样,我将为我的每个类创建这样的静态方法,并安全地假设它更具可读性和灵活性。
【问题讨论】:
-
您是否尝试过深入研究源代码?
-
或许是为了保证可读性。
-
@JanDvorak
new Pattern(".")是可读的,如果不是更多的话,不是吗:) -
如果两个重载具有相同的签名,则不会。
-
添加构造函数会得到什么?这是一个诚实的问题。
标签: java design-patterns constructor static-methods factory-pattern