La Red de Conocimientos Pedagógicos - Currículum vitae - Disposición de reglas de FindBugs: mala práctica

Disposición de reglas de FindBugs: mala práctica

Ahora se ha transferido a mi blog personal y la dirección de esta serie es el blog de Lin: Knowledge is Action.

Cree una entrada de archivo jar vacía

Llame al método putNextEntry() y llame al método closeEntry() tan pronto como se escriba la nueva entrada del archivo jar. Esto dará como resultado que la entrada JarFile esté vacía.

Crear una entrada de archivo zip vacía

Al escribir una nueva entrada de archivo zip, llame al método putNextEntry() para llamar inmediatamente al método closeEntry(). Esto hará que la entrada ZipFile esté vacía.

El método Equals no debe hacer ninguna suposición sobre el tipo de sus parámetros

El método equals(Object o) no puede hacer ninguna suposición sobre el tipo de parámetro o. Compara este objeto con el objeto especificado. El resultado es verdadero si y sólo si el argumento no es nulo y representa un objeto del mismo tipo que este objeto.

Los objetos aleatorios se crean y usan solo una vez

Los objetos creados aleatoriamente se usan una vez y se descartan.

Compruebe el signo de las operaciones bit a bit.

Compruebe si el operador de la broca está funcionando correctamente.

La clase implementa Cloneable, pero no define ni usa el método de clonación

La clase implementa la interfaz Cloneable, pero no define ni usa el método de clonación. Por convención, las clases que implementan esta interfaz deben anular Object.clone (protegido) con métodos * * * públicos para obtener más información sobre cómo anular este método.

El método clone no llama a super.clone()

La clase no final define el método clone(), pero no llama al método super.clone(). Por ejemplo: B se extiende desde A. Si el método de clonación en B llama a spuer.clone(), pero el clon en A no llama a spuer.clone(), entonces el tipo de resultado será inexacto. Es necesario llamar al método spuer.clone() en el método de clonación de A.

La clase define clone(), pero no implementa Cloneable

El método clone está definido en la clase, pero no implementa la interfaz Cloneable.

La clase abstracta define el método covariante compareTo()

La clase abstracta define varios métodos compareTo(). Es correcto anular el método compareTo en Comparable. son de tipo Objeto.

El método covariante compareTo() está definido

Varios métodos compareTo() están definidos en la clase. Es correcto anular el método compareTo en Comparable. Los parámetros de estos métodos pertenecen al tipo Objeto.

Los métodos pueden generar excepciones

Los métodos pueden generar excepciones.

Los métodos pueden ignorar las excepciones

Los métodos pueden ignorar las excepciones.

No utilice removeAll para borrar una colección.

No utilice el método removeAll para borrar una colección.

Los cargadores de clases solo se pueden crear en bloques doPrivileged

Los cargadores de clases solo se pueden construir en cuerpos de métodos especiales.

El método llama a System.exit(...)

Llame a la instrucción System.exit(...) y considere usar RuntimeException en su lugar.

El método llama al método peligroso runFinalizersOnExit

El método System.runFinalizersOnExit o Runtime.runFinalizersOnExit se llama en el método porque hacerlo es peligroso.

¡Utilice == o para comparar parámetros de cadena! =

Usa = = o! Métodos para comparar parámetros de tipo cadena

La clase abstracta define el método covariante igual a()

La clase abstracta define el método * * * variante compareTo().

Equals busca operandos incompatibles

El método equals busca operaciones inconsistentes. Las dos clases están básicamente en una relación padre-hijo y se llama al método igual para determinar si los objetos son iguales.

La clase define compareTo(...) y usa Object.equals()

La clase define el método compareTo(...), pero usa Object.equals() método.

El método igual falla para los subtipos

Un método igual en una clase puede ser roto por un método en una subclase. Cuando utilice un juicio como Foo.class == o.getClass(), puede considerar usar this.getClass() == o.getClass() en su lugar.

Se define el método covariante igual ()

Se definen múltiples métodos iguales en la clase. La forma correcta es anular el método igual en Objeto y su parámetro es un objeto de tipo Objeto.

El finalizador vacío debe eliminarse

El método finalize() vacío debe eliminarse.

Tipo no marcado en llamada genérica

Se utiliza un tipo no marcado en una llamada genérica.

La clase define equals(), pero no hashCode()

Este método define el método equals, pero no define el método hashCode.

La clase define hashCode(), pero no es igual a ()

La clase define el método hashCode, no el método igual.

La clase define equals() y usa Object.hashCode()

La clase anula el método equals, no anula el método hashCode y usa el método hashCode del objeto.

La clase hereda equals() y usa Object.hashCode()

La subclase hereda el método equals de la clase principal, pero usa el método hashCode del objeto.

La superclase usa la subclase durante la inicialización

Antes de inicializar la clase principal, la subclase usa una instancia del objeto de la clase principal.

Captura sospechosa de IllegalMonitorStateException

Captura sospechosa de IllegalMonitorStateException

Creación de instancias innecesaria de una clase que solo proporciona métodos estáticos

Crear objetos de instancia usando métodos estáticos. Al llamar a un método estático, simplemente use el nombre de la clase + el nombre del método estático.

El método next() del iterador no puede lanzar NoSuchElementException

El método next del iterador no puede lanzar NoSuchElementException.

Almacenar objetos no serializables en HttpSession

Guardar objetos discontinuos en el objeto HttpSession.

Los campos de clases inmutables deben ser definitivos

Los campos de clases inmutables deben ser finales.

Un método con un tipo de retorno booleano devuelve nulo explícito

Un método con un valor de retorno booleano devuelve nulo directamente, lo que provocará una excepción de puntero nulo.

El método equals() no comprueba los parámetros vacíos

Cuando se llama al método equals en una variable, no se juzga si está vacía.

El método toString puede devolver nulo.

El método ToString puede devolver nulo.

Los nombres de las clases deben comenzar con una letra mayúscula.

Los nombres de las clases deben comenzar con una letra mayúscula.

La clase no se deriva de excepción, incluso si se nombra de esa manera

Una clase cuyo nombre contiene excepción, pero no es una subclase de la clase Exception, puede causar confusión.

Nombres de métodos confusos

Nombres de métodos confusos

Los nombres de los campos deben comenzar con letras minúsculas

Los campos no finales deben seguir mayúsculas Camel principio de denominación.

Uso de un identificador como palabra clave en versiones posteriores de Java

Verifique que sea una palabra clave reservada de Java.

Usar identificadores como palabras clave en versiones posteriores de Java

Verifique que sea una palabra clave en Java

Los nombres de los métodos deben estar en letras minúsculas Inicio

Los nombres de los métodos comienzan con una letra minúscula.

Los nombres de las clases no deben ocultar el nombre simple de la interfaz de implementación.

Las clases que implementan la misma interfaz no pueden usar el mismo nombre, incluso si están en paquetes diferentes.

Los nombres de las clases no deben ocultar el nombre simple de la superclase

Las clases hijas que heredan la misma clase padre no pueden usar el mismo nombre, incluso si están en paquetes diferentes.

Nombres de métodos muy confusos (pero probablemente intencionales)

Es fácil confundir los nombres de métodos; por ejemplo, el nombre de un método usa mayúsculas y minúsculas para distinguir dos métodos diferentes.

El método no anula el método en la superclase debido a un paquete de parámetros incorrecto.

El método en la superclase no se puede anular correctamente porque el error hace referencia a una clase con el mismo nombre de clase en un objeto de paquete diferente.

Es posible que el método no pueda cerrar el recurso de la base de datos.

Es posible que no se pueda cerrar la conexión de datos en el método.

Es posible que el método no cierre la secuencia.

Es posible que el método no cierre la secuencia.

Es posible que el método no cierre la secuencia en caso de excepción

Puede ocurrir una excepción en el método al cerrar la secuencia.

Comparaciones de referencias sospechosas con constantes

Cuando son objetos de diferentes tipos, use el método igual para comparar si sus valores son iguales, en lugar de usar el método ==. Por ejemplo, las dos comparaciones son java.lang.integer y java.lang.float.

El método ignora el resultado de InputStream.read()

El método InputStream.read ignora los múltiples caracteres devueltos. Si el resultado no se verifica, la solicitud del usuario lee varios caracteres. no será correcto.

El método ignora el resultado de InputStream.skip()

El método InputStream.skip() ignora los múltiples caracteres devueltos. Si el resultado no se verifica, no puede manejar correctamente cómo. muchos caracteres que el usuario omitió. Solicitudes de caracteres.

El método ignora el valor de retorno de la excepción

El método ignora la información de excepción del valor de retorno.

El inicializador estático crea una instancia antes de que se asignen todos los campos finales estáticos.

Utilice la inicialización estática para crear una instancia de una clase antes de que se asignen todos los campos finales estáticos.

Los valores no serializables se almacenan en campos de instancia de una clase serializable

Los valores no serializables se almacenan en campos no serializables que se declaran como serializables.

El comparador no implementa la serialización

La interfaz del comparador no implementa la interfaz serializable.

Clase interna serializable

Clase interna serializable

serialVersionUID no es la versión final

SerialVersionUID no es la versión final.

La clase es serializable, pero su superclase no define un constructor vacío

Cuando la subclase se serializa, la clase principal no proporciona un constructor vacío.

La clase es externalizable pero no define un constructor vacío

La clase de instancia externalizada no define un constructor vacío.

El método readResolve debe declararse con el tipo de retorno de Objeto.

ReadResolve lee una instancia de una clase de la secuencia. Este método debe declarar que devuelve un objeto de tipo Objeto.

Un campo transitorio que no se establece mediante deserialización.

Los campos que no requieren deserialización no se declaran transitorios.

La clase es serializable, pero serialVersionUID no está definido

Una clase implementa la interfaz Serializable, pero no define una variable de tipo serialVersionUID. El tiempo de ejecución de serialización está asociado con cada clase serializable mediante un número de versión llamado serialVersionUID, que se utiliza para verificar que el remitente y el receptor del objeto serializado cargaron las clases compatibles con la serialización. Si el serialVersionUID de la clase del objeto cargado por el receptor es diferente del número de versión de la clase del remitente correspondiente, la deserialización dará como resultado una InvalidClassException. Una clase serializable puede declarar explícitamente su propio serialVersionUID declarando un campo llamado "serialVersionUID" (que debe ser un campo largo estático y final).

Si la clase está extendida, usar GetResource puede no ser seguro.

Cuando una subclase hereda una clase, no use this.getClass(). getResource(...) para obtener el recurso.

FindBugs: introducción y uso

Clasificación de reglas FindBugs: corrección

Clasificación de reglas FindBugs: estilo y esquiva

Clasificación de reglas FindBugs: malicioso vulnerabilidades de código

Clasificación de reglas de FindBugs: corrección multiproceso

Clasificación de reglas de FindBugs: seguridad y experimentación

Clasificación de reglas de FindBugs: rendimiento

Disposición de reglas FindBugs: internacionalización

Durante el proceso de integración de los siguientes artículos, se descubrieron y se corrigieron algunos errores de traducción. Gracias al autor del siguiente artículo.

Nota de uso de FindBugs

Clasificación de reglas de FindBugs

Explicación detallada del detector FindBugs.

Explicación detallada de los defectos de Findbugs y tabla comparativa de códigos en inglés