Red de conocimiento de abogados - Derecho de sociedades - Compilación de reglas FindBugs: mala práctica

Compilación de reglas FindBugs: mala práctica

Actualmente, se ha transferido a mi blog personal. La dirección de esta serie es: Blog de Lam: conocimiento como acción.

Crea una entrada de archivo jar vacía.

Llame al método putNextEntry() para escribir. El método closeEntry() se llama inmediatamente cuando se ingresa una nueva entrada en el archivo jar. Esto hará que la entrada JarFile esté vacía.

Crea una entrada de archivo zip vacía

El método closeEntry() se llama inmediatamente cuando se llama al método putNextEntry() para escribir una nueva entrada de archivo zip. Esto hará que la entrada ZipFile esté vacía.

El método Equals no debe asumir nada sobre el tipo de su argumento.

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.

Objeto aleatorio creado y usado solo una vez

El objeto creado aleatoriamente se usa solo una vez y luego se descarta

Verifique si hay signos de operación bit a bit

Compruebe si el operador de bits funciona correctamente

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

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

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

Una clase de tipo 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 método de clonación en A no llama a spuer.clone(), 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

Clase abstracta define el método covariante compareTo()

Hay varios métodos compareTo() definidos en la clase abstracta. El método correcto es anular el método compareTo en Comparable. Los parámetros del método son de tipo Objeto.

Método covariante compareTo() definido

Hay múltiples métodos compareTo() definidos en la clase. El correcto es anular el método compareTo en Comparable. Los parámetros del método son de tipo Objeto.

El método puede descartar una excepción

El método puede generar una excepción

El método puede ignorar la excepción

El método puede ignorar la excepción

No use removeAll para borrar una colección

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

Los cargadores de clases solo deben crearse dentro del bloque doPrivileged

Clase los cargadores solo se pueden crear dentro de cuerpos de métodos especiales

El método invoca System.exit(...)

Al llamar a la instrucción System.exit(...) en un método, considere usar RuntimeException en su lugar

El método invoca el método peligroso runFinalizersOnExit

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

Comparación de parámetros de cadena usando == o !=

Utilice el método == o != para comparar parámetros de tipo cadena

La clase abstracta define covariantes iguales ( ) método

La clase abstracta define un método compareTo() modificado

Equals verifica si hay operandos no compatibles

El método igual verifica si hay operaciones inconsistentes. Básicamente, las dos clases tienen una relación padre-hijo y llaman 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 el método Object.equals()

p>

El método igual falla para los subtipos

El método igual en la clase puede ser destruido por el método en la subclase. Considere usarlo cuando use un juicio similar a Foo.class =. = o.getClass() this.getClass() == o.getClass() para reemplazar

Método covariante igual() definido

Hay múltiples métodos iguales definidos en la clase. El enfoque correcto es anular el método igual en Objeto y su parámetro es un objeto de tipo Objeto.

Se debe eliminar el finalizador vacío

Se debe eliminar el método finalize() vacío

Tipo sin marcar en llamada genérica

En llamada genérica Se utiliza un tipo no marcado

La clase define equals() pero no hashCode()

El método define el método equals pero no define el método hashCode

Clase define hashCode () pero no es igual a()

La clase define igual a() y usa Object.hashCode()

Una clase anula el método igual, no anula el método hashCode y usa el método hashCode del objeto Object

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

Herencia de subclase Se usa el método igual de la clase principal pero el método hashCode de Se utiliza el objeto

La superclase usa la subclase durante la inicialización

La subclase usa la instancia del objeto de la clase principal antes de que se inicialice la clase principal

Captura dudosa de IllegalMonitorStateException

Captura dudosa de IllegalMonitorStateException

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

Cree un objeto de instancia para usar métodos estáticos. Al llamar a un método estático, solo necesita usar el nombre de la clase y el nombre del método estático.

El método iterador next() no puede generar NoSuchElementException

El siguiente método del iterador no puede generar NoSuchElementException

Almacenamiento de objetos no serializables en HttpSession

p>

Guardar objetos no consecutivos en el objeto HttpSession

Los campos de clases inmutables deben ser finales

Los campos de clases inmutables deben ser finales

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

Los métodos con un valor de retorno de tipo booleano devuelven directamente un valor nulo, lo que provocará una excepción de puntero nulo

El método equals() no verifica para argumento nulo

Al llamar al método igual de una variable, no se juzga si es nulo o no

El método toString puede devolver nulo

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 una excepción, aunque se nombre como tal

Los nombres de clases que contienen Exception pero no son subclases de la clase de excepción pueden causar confusión

Nombres de métodos confusos

Nombres de métodos confusos

p>

Los nombres de los campos deben comenzar con una letra minúscula

Los campos no finales deben seguir el principio de nomenclatura en mayúsculas y minúsculas

Uso de un identificador que sea un palabra clave en versiones posteriores de Java

Verificar si es una palabra clave reservada de Java

Uso de identificador que es una palabra clave en versiones posteriores de Java

Verificar si es una palabra clave en java

Los nombres de los métodos deben comenzar con una letra minúscula

Los nombres de los métodos deben comenzar con una letra minúscula

Los nombres de las clases no deben sombra nombre simple de la interfaz implementada

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 eclipsar el nombre simple de la superclase

p>

Heredar el mismo hijo de clase padre

Las clases no pueden usar el mismo nombre, incluso si están en paquetes diferentes

Nombres de métodos muy confusos (pero quizás intencionales)

Nombres de métodos muy confusos (pero quizás intencionales)

Nombres de métodos muy confusos, como nombres de métodos que usan size Escrito para distinguir entre dos métodos diferentes.

El método no anula el método en la superclase debido a un paquete incorrecto para el parámetro

Debido a una referencia incorrecta a un objeto con el mismo nombre de clase en un paquete diferente, no puede anular correctamente el método en la superclase. Método

Es posible que el método no cierre el recurso de la base de datos

Es posible que el método no cierre la conexión de datos

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

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

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

Sospechoso comparación de referencia con constante

Cuando los dos objetos son de diferentes tipos, use el método igual para comparar si sus valores son iguales, en lugar de usar el método ==. Por ejemplo, los dos comparados son java.lang.Integer y java.lang.Float

El método ignora los resultados de InputStream.read()

El método InputStream.read ignora los múltiples caracteres devuelto , si no se verifica el resultado, no podrá manejar correctamente la solicitud del usuario de leer una pequeña cantidad de caracteres.

El método ignora los resultados de InputStream.skip()

El método InputStream.skip() ignora los múltiples caracteres devueltos. Si no se verifican los resultados, no puede manejarlos correctamente. el usuario omite una pequeña cantidad de caracteres. Situación de solicitud de caracteres

El método ignora el valor de retorno excepcional

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 asignar valores a todos los campos finales estáticos.

Valor no serializable almacenado en el campo de instancia de una clase serializable

Valor no serializable almacenado en un campo no serializable declarado como serializable

El comparador no t implementar Serializable

La interfaz Comparator no implementa la interfaz Serializable

Clase interna serializable

Clase interna de serialización

serialVersionUID no es 't final

serialVersionUID no es final

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

La clase principal no lo proporciona cuando la subclase está serializada Un constructor vacío

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

La clase de instancia externalizable no define un constructor vacío

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

readResolve lee una instancia de la clase del flujo, este método debe declararse para devolver un objeto de tipo Objeto

Campo transitorio que no se establece mediante deserialización

Los campos que no necesitan ser deserializados no se declaran transitorios

La clase es serializable, pero no define serialVersionUID

Una clase La interfaz Serializable está implementada pero no se define ninguna 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 usa durante la deserialización para verificar que el remitente y el receptor del objeto serializado hayan cargado 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 correspondiente de la clase del remitente, 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 final, estático)

El uso de GetResource puede no ser seguro si la clase se extiende

Cuando una clase es heredada por una subclase, no use this.getClass().getResource(...) para obtener recursos

FindBugs: Introducción y uso

regla FindBugs organización: CORRECCIÓN

Organización de reglas FindBugs: Estilo y Dodgy

Organización de reglas FindBugs: Vulnerabilidad de código malicioso

Clasificación de reglas FindBugs: Corrección multiproceso

Intercalación de reglas FindBugs: Seguridad y Experimental

Intercalación de reglas FindBugs: Rendimiento

Intercalación de reglas FindBugs: Internacionalización

Durante el proceso de integración de los siguientes artículos, Se encontraron algunos errores de traducción y se corrigieron. También agradecemos a los autores de los siguientes artículos

Notas de uso de FindBugs

Disposición de las reglas de FindBugs

Explicación detallada de FindBugs. Varios detectores

Tabla comparativa de detalles de defectos de Findbugs y nombres de códigos en inglés