我一直在回顾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?");
}
}
}
使用静态方法而不是构造函数背后还有其他强有力的理由吗?
Edit: 我发现了一个相关问题 https://stackoverflow.com/questions/855518/why-does-java-pattern-class-use-a-factory-method-rather-than-constructor这里。那里的答案也没有让我信服。通读所有答案,我感觉静态方法在创建对象方面比公共构造函数有很多优势,但反之则不然。真的吗?如果是这样,我将为我的每个类创建这样的静态方法,并安全地假设它更具可读性和灵活性。
通常,由于以下三个原因之一,类不会具有公共构造函数:
- 该类是一个实用程序类,没有理由实例化它(例如,java.lang.Math)。
- 实例化可能会失败,并且构造函数无法返回
null
.
- 静态方法阐明了实例化期间发生的事情背后的含义。
在班级中Pattern
,适用第三种情况——静态compile
使用方法只是为了清楚起见。通过构建模式new Pattern(..)
从解释的角度来看没有意义,因为有一个复杂的过程可以继续创建一个新的Pattern
。为了解释这个过程,静态方法被命名为compile
,因为正则表达式本质上是为了创建模式而编译的。
简而言之,没有任何编程目的Pattern
只能通过静态方法构造。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)