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问题?
答案 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);