В настоящее время у меня есть пара одноэлементных объектов, в которых я выполняю сопоставление с регулярными выражениями, и мои Pattern
s определяются следующим образом:
class Foobar {
private final Pattern firstPattern =
Pattern.compile("some regex");
private final Pattern secondPattern =
Pattern.compile("some other regex");
// more Patterns, etc.
private Foobar() {}
public static Foobar create() { /* singleton stuff */ }
}
Но на днях кто-то сказал мне, что это плохой стиль, и Pattern
s всегда должны быть определены на уровне класса, а вместо этого должны выглядеть примерно так:
class Foobar {
private static final Pattern FIRST_PATTERN =
Pattern.compile("some regex");
private static final Pattern SECOND_PATTERN =
Pattern.compile("some other regex");
// more Patterns, etc.
private Foobar() {}
public static Foobar create() { /* singleton stuff */ }
}
Время жизни этого конкретного объекта не так долго, и моя главная причина использования первого подхода в том, что мне не имеет смысла держаться за Pattern
s после того, как объект получит GC'd.
Есть предложения / мысли?
источник