Java Pattern 类没有公共构造函数,为什么?

2024-03-06

我一直在回顾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(使用前将#替换为@)

Java Pattern 类没有公共构造函数,为什么? 的相关文章

随机推荐