Я просматривал библиотеку 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?");
}
}
}
Любые другие сильные аргументы в пользу использования статического метода над конструктором?
Изменить: здесь был найден вопрос. Ни один из ответов там не убедил меня. Прочитав все ответы, я чувствую, что статический метод имеет немало преимуществ перед публичным конструктором в отношении создания объекта, но не наоборот. Это правда? Если это так, я собираюсь создать такие статические методы для каждого из моих классов и смело предположить, что он более читабельным и гибким.