Métodos do capítulo 7 do "Java 2 eficaz"

índice

Artigo 38 Verificar a validade dos parâmetros

Artigo 39 Cópia protetora quando necessário

Artigo 40 Projete assinaturas de método com cuidado

Artigo 41 Use sobrecargas com cuidado

Artigo 42 Use parâmetros variáveis ​​com cuidado

O Artigo 43 retorna uma matriz ou coleção de comprimento zero, não nula

Artigo 44 Escreva notas de documentação para todos os elementos de API exportados


Foco: Usabilidade, robustez, flexibilidade

Artigo 38 Verificar a validade dos parâmetros

Ao escrever métodos ou construtores, você deve considerar as limitações dos parâmetros e verificar explicitamente

 

Artigo 39 Cópia protetora quando necessário

Se a classe possui componentes mutáveis ​​obtidos do cliente ou devolvidos ao cliente, a fim de manter a imutabilidade, uma cópia de proteção é feita quando necessário.

Caso contrário, é declarado no documento que este componente não pode ser modificado.

Por exemplo:

Copiar código

public final class Period {
   private final Date start;
   private final Date end;
   public Period(Date start, Date end) {
      if (start.compareTo(end) > 0) {
         throw new IllegalArgumentException(strat + "after" + end);
      }
      this.start = start;
      this.end = end;
   }
   public Date start() {
      return start;
   }
   public Date end() {
      return end;
   }
}

Copiar código

O período representa um período de tempo imutável.

No entanto, o período não é imutável! ! ! Porque a data é variável.

Date start = new Date();
Date end = new Date();
Period p = new Period(strat, end);
end.setYear(78);//因为Date是可变的,导致p被修改了

Solução:

Copiar código

public Period(Date start, Date end) {
      //先进行保护性拷贝,然后再对拷贝后的进行检查
      this.start = new Date(start.getTime()); //使用保护性拷贝
      this.end = new Date(end.getTime()); //使用保护性拷贝
      if (this.start.compareTo(this.end) > 0) {
         throw new IllegalArgumentException(strat + "after" + end);
      }
   }

Copiar código

O período ainda pode ser alterado.

Date start = new Date();
Date end = new Date();
Period p = new Period(strat, end);
p.end().setYear(78);//因为Date是可变的,导致p被修改了

Solução:

   public Date start() {
      return new Date(start.getTime());
   }
   public Date end() {
      return new Date(end.getTime());
   }

 

Artigo 40 Projete assinaturas de método com cuidado

1. Evite longas listas de parâmetros. 4 parâmetros ou menos.

Não defina longas sequências de parâmetros do mesmo tipo, é fácil confundir acidentalmente a ordem dos parâmetros.

Como encurtar a longa lista de parâmetros?

1) Dividir em vários métodos

2) Crie uma classe auxiliar para salvar o agrupamento de parâmetros.

3) Adote o modo Builder. Este método é especialmente útil quando o método possui vários parâmetros e alguns deles são opcionais!

 

2. Para tipos de parâmetros, as interfaces são preferíveis às classes.

 

3. Para o tipo booleano, o tipo de enumeração de dois elementos é preferido

 

Artigo 41 Use sobrecargas com cuidado

Por que usar a sobrecarga com cuidado?

Porque em circunstâncias especiais (conversão de tipo, boxing e unboxing automáticos, etc.), é difícil determinar qual método sobrecarregado será chamado.

Sugira

1) Para métodos múltiplos com o mesmo número de parâmetros, a sobrecarga deve ser evitada tanto quanto possível.

2) Para evitar esta situação: o mesmo conjunto de parâmetros pode ser passado para diferentes métodos sobrecarregados somente após a conversão do tipo.

举例 : m (Lista <?> S) , m (Definir <?> S) , m (Coleção <?> S)。

 

Artigo 42 Use parâmetros variáveis ​​com cuidado

Quando o desempenho é importante, use parâmetros variáveis ​​com cuidado. Cada chamada de um parâmetro variável resultará em uma alocação e inicialização de array.

Como melhorar? Quando for determinado que 95% das chamadas têm 3 ou menos parâmetros, defina 5 métodos sobrecarregados.

m ()

m (int a)

m (int a, int b)

m (int a, int b, int c)

m (int a, int b, int c, int .... resto)

 

O Artigo 43 retorna uma matriz ou coleção de comprimento zero, não nula

Para métodos cujo tipo de retorno é uma matriz ou coleção, ele retorna uma matriz ou coleção de comprimento zero em vez de retornar nulo.

 

Artigo 44 Escreva notas de documentação para todos os elementos de API exportados

Acho que você gosta

Origin blog.csdn.net/hanhan122655904/article/details/114369323
Recomendado
Clasificación