Atualmente, tenho alguns objetos singleton nos quais estou fazendo correspondência em expressões regulares, e meus Pattern
s são definidos assim:
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 */ }
}
Mas alguém me disse outro dia que esse é um estilo ruim, e semprePattern
deve ser definido no nível da classe e, em vez disso, é algo parecido com isto:
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 */ }
}
A vida útil desse objeto em particular não é tão longa, e minha principal razão para usar a primeira abordagem é porque não faz sentido para mim manter os Pattern
s quando o objeto recebe GC.
Alguma sugestão / pensamento?
fonte