Écrire à champ statique à partir de la méthode d'instance
J'ai mon code comme ci-dessous. Je vois
public MyClass{
private static DataSource dataSource = null;
private static DataSource getDataSource(){
if (dataSource == null) {
try {
dataSource = //something.
} catch (Exception e) {
//some exception.
}
}
return dataSource;
}
public List doSomething(){
//...
if(dataSource == null){
dataSource = getDataSource();
}
dataSource.getConnection();
//...
}
}
Je voir le message suivant dans l'analyse sonar.
Dodgy - Write to static field from instance method
This instance method writes to a static field. This is tricky to get correct if multiple instances are being manipulated, and generally bad practice.
findbugs:ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD Sep12 Reliability > Architecture
Je vois que tout va bien dans cette mise en œuvre, à l'exception de la modification de la variable statique dans doSomething méthode. Comment pouvons-nous résoudre ce problème ?
Faire de la cession, de la méthode statique?
OriginalL'auteur TechCrunch | 2014-07-11
Vous devez vous connecter pour publier un commentaire.
Pas sûr de savoir comment votre outil d'analyse statique fonctionne mais -
essayez d'écrire à votre valeur au travers d'une statique setter:
de sorte que vous pouvez le faire
aller de l'avant et de modifier, d'être mon invité
OriginalL'auteur David T.
Vous avez à choisir entre deux solutions , la première est dans votre classe Datasource ajouter
getDatasource()
méthode et de synchroniser le bloc où vous instanciez votre champ statique :ensuite, il vous suffira d'appeler cette méthode à partir de votre
doSomething()
méthodedeuxième solution consiste à instancier votre terrain à la classe de temps de chargement à l'aide d'un bloc statique ou directement à partir de la déclaration.
OriginalL'auteur Mifmif