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;
}
}
Run Code Online (Sandbox Code Playgroud)
错误消息是 Make "DATE_FORMATTER" an instance variable.
我怎样才能避免这个SonarQube问题?
在上面的类中,SonarQube试图说DATE_FORMATTER如果没有任何static方法使用它就不需要是静态的.
实际上,SimpleDateFormat也不应该是一个实例变量,因为它不是线程安全的(在这里解释).如果多个线程同时访问TimeA类的方法,那么将导致不正确的结果.
如果格式相同,那么您可以将其声明为a 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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2097 次 |
| 最近记录: |