如何解决"使字段成为实例变量"问题?

时间:2017-07-27 07:26:55

标签: java sonarqube

SonarQube 5.5(带有sonar-java-plugin-3.13.1.jar插件)报告此代码存在问题:

public class TimeA {
    public static final SimpleDateFormat DATE_FORMATTER;

    static {
        SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
        df.setTimeZone(TimeZone.getTimeZone("GMT"));
        DATE_FORMATTER=df;
    }
} 

错误讯息为Make "DATE_FORMATTER" an instance variable.

如何避免这个SonarQube问题?

1 个答案:

答案 0 :(得分:5)

在上面的课程中,DATE_FORMATTER试图说static如果没有被任何SimpleDateFormat方法使用,则不需要是静态的。

实际上,TimeA也不应该是一个实例变量,因为它不是线程安全的(解释here)。如果多个线程同时访问final String类的方法,则会导致错误的结果。

如果格式相同,则可以将其声明为SimpleDateFormat并在本地创建public final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss.SSS"; public void someMethod(){ SimpleDateFormat df=new SimpleDateFormat(DATE_FORMAT); df.setTimeZone(TimeZone.getTimeZone("GMT")); //Further processing } 个实例,例如:

   getmydata2=function(data){
      console.log("hiiiii" , data);
   }

   getmydata = function() {
        return $http.get("getConnectionData.php").then(function (response) {
                     $scope.links1 = response.data.records;
                     getmydata2($scope.links1);
               });

   }

 google.maps.event.addListener(marker, 'dragend', getmydata);