type sirve que para not here español allowed java findbugs

java - sirve - ¿Cuál es la mejor manera de solucionar esta advertencia de ''findbugs'' del método de escritura en el campo estático desde la instancia?



@override android para que sirve (3)

Tengo una clase que se parece a esto, y findbugz se está quejando de "escribir en el campo estático desde el método de instancia ''( initialize() , y killStaticfield() ). No puedo establecer el campo estático en el ctor.

  • ¿Cuál es la mejor solución para este problema?
  • ¿Bastaría poner staticField en una referencia atómica?

    public class Something { private static SomeClass staticField = null; private AnotherClass aClass; public Something() { } public void initialize() { //must be ctor''d in initialize aClass = new AnotherClass(); staticField = new SomeClass( aClass ); } public void killStaticField() { staticField = null; } public static void getStaticField() { return staticField; } }


Eliminar la estática de staticField si no debería ser estática.

Haz kill y getStaticField static. Y usualmente hace referencia a estática por el nombre de la clase, no por un (implícito), para dejar muy claro que es estático y puede causar consecuencias inesperadas en otros thReads.

En caso de duda, no utilice estadísticas para campos no constantes.


La pregunta es qué quieres hacer con el campo estático. Si cambia para cada clase que crea, puede que no sea una buena idea tenerlo estático. Si se inicializa solo una vez, solo deberías inicializarlo perezosamente como un singleton.

public class Something { private static SomeClass staticField = null; public Something() { } public static SomeClass getStaticField() { if(staticField == null) staticField = new SomeClass();; return staticField; } }


Manteniéndose lo más cerca posible de su diseño original ...

public class Something { private static volatile SomeClass staticField = null; public Something() { } public static SomeClass getStaticField() { if(Something.staticField == null) Something.staticField = new SomeClass();; return Something.staticField; } }

Consulte su variable estática a través del nombre de la clase, que eliminará la advertencia de findbugz. Marque su variable estática como volátil, lo que hará que la referencia sea más segura en un entorno multiproceso.

Aún mejor sería:

public class Something { private static final SomeClass staticField = new SomeClass(); public Something() { } public static SomeClass getStaticField() { return Something.staticField; } }