DEV Community

Java Efetivo (livro)
Java Efetivo (livro)

Posted on

Item 62: Evite as strings onde outros tipos forem mais adequados

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

Enter fullscreen mode Exit fullscreen mode

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

Enter fullscreen mode Exit fullscreen mode

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";

Enter fullscreen mode Exit fullscreen mode

Exemplo correto (uso de uma classe):

class Person {
    String firstName;
    String lastName;
    int age;

    // Construtor e métodos adequados
}

Enter fullscreen mode Exit fullscreen mode

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);

Enter fullscreen mode Exit fullscreen mode

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);

Enter fullscreen mode Exit fullscreen mode

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
}

Enter fullscreen mode Exit fullscreen mode

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:

Image description

Image description

Top comments (0)