2012-07-04 9 views

Respuesta

12

En palabras de la documentación 'findbugz':

Este método de instancia escribe en un campo estático. Esto es complicado de corregir si se manipulan varias instancias y, en general, es una mala práctica.

Lo que quiere decir que no siempre es incorrecto, simplemente que es algo que a menudo es una fuente de errores. Los objetos de instancia que manipulan campos estáticos pueden ser útiles, por ejemplo, para la inicialización lenta de objetos compartidos, por lo que no siempre es incorrecto, pero puede ser difícil hacerlo bien (especialmente si se pueden ejecutar varios hilos al mismo tiempo).

+0

¿Cómo funciona la ejecución simultánea de varios subprocesos en este código para que tenga errores? Mi pregunta era para obtener una respuesta a esto en realidad. ¿Tenemos la posibilidad de crear múltiples instancias del campo? – Inquisitive

+0

Solo queda un campo, pero si dos de ellos intentan escribir casi al mismo tiempo, puede terminar con la creación de dos objetos y el cambio del campo, mientras que probablemente solo haya deseado una copia del objeto. . Esto podría causar problemas graves en algunos casos, ya que diferentes instancias del objeto propietario podrían estar utilizando diferentes objetos compartidos. Debería colocar un bloque sincronizado (this.getClass()) alrededor de cualquier código que pueda cambiar el campo estático para asegurarse de que funcionó. – Jules

0

Además de lo anterior, desde un punto de vista la documentación es fácil para alguien que asuma que es un campo de instancia, si se utiliza la forma:

someField = null 

o

myObj.someField = null 

utilizando el formulario

myClass.someField = null 

hace que sea más clara y evita la advertencia findbugz (al parecer, no he probado). Tenga en cuenta que eso no evitará los problemas de subprocesos múltiples descritos.

0

Puede ser útil, por ejemplo, si tienes una aplicación que administra hormigas y necesitas poder acceder al número total de hormigas creadas de la clase de hormigas. Esto se puede hacer escribiendo a un método estático que realiza un seguimiento del número total de hormigas cada vez que crea una nueva hormiga escribe en el método estático addAnt();

Cuestiones relacionadas