1. Evitar usar strings como substitutas de outros tipos de dados:
Strings são projetadas para representar texto, mas muitas vezes são usadas indevidamente para representar números, enums ou estruturas agregadas.
Se os dados forem de natureza numérica, use tipos como int, float ou BigInteger, e não String.
String age = "30"; // incorreto
int age = 30; // correto
2. Strings são substitutas precárias para tipos enum:
Usar enum é mais seguro e legível do que usar strings para representar valores enumerados.
String status = "ACTIVE"; // incorreto
Status status = Status.ACTIVE; // correto, usando enum
3. Strings são substitutas inferiores para tipos agregados:
Representar dados complexos como uma única string, separados por delimitadores, pode causar erros e problemas de manutenção. É melhor criar classes para esses dados.
Exemplo incorreto (uso de string para representar dados agregados):
String personData = "John|Doe|30";
Exemplo correto (uso de uma classe):
class Person {
String firstName;
String lastName;
int age;
// Construtor e métodos adequados
}
4. Strings como substitutas para recursos (Exemplo: variáveis locais da thread):
O uso de strings para identificar recursos como variáveis locais de thread pode levar a problemas de segurança e colisões de nomes. Substitua por chaves mais seguras.
Exemplo incorreto (uso de string para identificar variável local da thread):
Map<String, Object> threadLocalVariables = new HashMap<>();
threadLocalVariables.put("myVariable", value);
Exemplo correto (uso de uma chave segura):
class Key {
// implementação da chave
}
Map<Key, Object> threadLocalVariables = new HashMap<>();
Key key = new Key();
threadLocalVariables.put(key, value);
Uso correto de ThreadLocal:
O design ideal para variáveis locais de thread envolve a utilização de ThreadLocal, que permite a criação de variáveis associadas a cada thread de maneira typesafe.
Exemplo de uso correto de ThreadLocal:
private static final ThreadLocal<Integer> threadId = ThreadLocal.withInitial(() -> 0);
public static void main(String[] args) {
System.out.println(threadId.get()); // obtem o valor da variável local da thread
}
Conclusão:
Evite a tentação de usar strings para tudo. Usar tipos de dados mais apropriados ou criar novos tipos evita erros, melhora a legibilidade e torna o código mais eficiente e seguro.
Exemplos do livro:
Top comments (0)