2012-07-04 8 views

risposta

12

Nelle parole della documentazione 'findbugz':

Questo metodo di istanza scrive ad un campo statico. Questo è difficile da correggere se vengono manipolate più istanze e, in generale, le cattive pratiche.

Ciò significa che non è sempre sbagliato, semplicemente che è qualcosa che è spesso fonte di errori. Gli oggetti di istanza che manipolano campi statici possono essere utili, ad esempio, per l'inizializzazione pigra di oggetti condivisi, quindi non sempre è sbagliato, ma può essere difficile farlo correttamente (in particolare se possono essere eseguiti più thread contemporaneamente).

+0

in che modo l'esecuzione di più thread in esecuzione simultanea in questo codice lo rende problematico? La mia domanda era di ottenere una risposta a questo in realtà. Abbiamo la possibilità di creare più istanze del campo? – Inquisitive

+0

C'è ancora un solo campo, ma se due di essi cercano entrambi di scrivere all'incirca nello stesso tempo, allora si può finire con la creazione di due oggetti e il cambio del campo, mentre probabilmente si desidera che esista solo una copia dell'oggetto . Ciò potrebbe causare seri problemi in alcuni casi, poiché diverse istanze dell'oggetto proprietario potrebbero utilizzare diversi oggetti condivisi. Dovresti inserire un blocco sincronizzato (this.getClass()) attorno a qualsiasi codice che potrebbe modificare il campo statico per assicurarti che funzioni. – Jules

0

In aggiunta a quanto sopra, da un punto di documentazione di vista è facile per qualcuno di assumere si tratta di un campo di istanza, se si utilizza il modulo:

someField = null 

o

myObj.someField = null 

utilizzando il modulo di

myClass.someField = null 

rende più chiara e previene l'avvertimento findbugz (a quanto pare, non ho ancora testato). Nota, ciò non impedirà i problemi di multi-threading descritti.

0

Può essere utile, ad esempio, se hai un'applicazione che gestisce le formiche e devi essere in grado di accedere al numero totale di formiche create dalla classe ant. Questo può essere fatto scrivendo su un metodo statico che tiene traccia del numero totale di formiche ogni volta che si crea una nuova formica sul metodo statico addAnt();

Problemi correlati