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