Métodos del capítulo 7 de "Effective Java 2nd"

Tabla de contenido

Artículo 38 Verificar la validez de los parámetros

Artículo 39 Copia de protección cuando sea necesario

Artículo 40 Diseñar cuidadosamente las firmas de métodos

Artículo 41 Utilice las sobrecargas con precaución

Artículo 42 Utilice los parámetros variables con precaución

El artículo 43 devuelve una matriz o colección de longitud cero, no nula

Artículo 44 Escribir notas de documentación para todos los elementos API exportados


Enfoque: usabilidad, robustez, flexibilidad

Artículo 38 Verificar la validez de los parámetros

Al escribir métodos o constructores, debe considerar las limitaciones de los parámetros y verificar explícitamente

 

Artículo 39 Copia de protección cuando sea necesario

Si la clase tiene componentes mutables obtenidos del cliente o devueltos al cliente, para mantener la inmutabilidad, se realiza una copia protectora cuando es necesario.

De lo contrario, se indica en el documento que este componente no se puede modificar.

Por ejemplo:

Copiar codigo

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 codigo

El período representa un período de tiempo inmutable.

¡Sin embargo, Period no es inmutable! ! ! Porque la fecha es variable.

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

Solución:

Copiar codigo

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 codigo

El período aún se puede cambiar.

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

Solución:

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

 

Artículo 40 Diseñar cuidadosamente las firmas de métodos

1. Evite listas de parámetros largas. 4 parámetros o menos.

No defina largas secuencias de parámetros del mismo tipo, es fácil confundir accidentalmente el orden de los parámetros.

¿Cómo acortar la larga lista de parámetros?

1) Dividir en varios métodos

2) Cree una clase auxiliar para guardar la agrupación de parámetros.

3) Adopta el modo Constructor. Este método es especialmente útil cuando el método tiene varios parámetros, ¡y algunos de ellos son opcionales!

 

2. Para los tipos de parámetros, se prefieren las interfaces a las clases.

 

3. Para el tipo booleano, se prefiere el tipo de enumeración de dos elementos.

 

Artículo 41 Utilice las sobrecargas con precaución

¿Por qué utilizar la sobrecarga con precaución?

Porque en circunstancias especiales (conversión de tipo, empaquetado y desempaquetado automático, etc.), es difícil determinar qué método sobrecargado se llamará.

Sugerir

1) Para varios métodos con el mismo número de parámetros, se debe evitar la sobrecarga tanto como sea posible.

2) Para evitar esta situación: el mismo conjunto de parámetros se puede pasar a diferentes métodos sobrecargados solo después de la conversión de tipos.

举例 : m (Lista <?> S) , m (Establecer <?> S) , m (Colección <?> S)。

 

Artículo 42 Utilice los parámetros variables con precaución

Cuando el rendimiento es importante, utilice los parámetros variables con cuidado. Cada llamada de un parámetro variable dará como resultado una asignación e inicialización de una matriz.

¿Cómo mejorar? Cuando se determina que el 95% de las llamadas tienen 3 o menos parámetros, defina 5 métodos sobrecargados.

metro()

m (int a)

m (int a, int b)

m (int a, int b, int c)

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

 

El artículo 43 devuelve una matriz o colección de longitud cero, no nula

Para los métodos cuyo tipo de retorno es una matriz o colección, devuelve una matriz o colección de longitud cero en lugar de devolver un valor nulo.

 

Artículo 44 Escribir notas de documentación para todos los elementos API exportados

Supongo que te gusta

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