Jig*_*aik 3 java sonarqube sonarlint
我有一个休息的Web服务,下面是我如何声明DateFormat的信息,因为这是我将在应用程序范围内使用的日期格式。
当我使用SonarLint eclipse插件进行代码分析时,我得到重大警告,提示“将DATE_FORMAT用作实例变量”。
public class Constants {
private Constants() {
}
public static final DateFormat DATE_TIME_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss:SSS");
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我,如果我在其余的API中使用这种方式会遇到什么问题?
如果我将其用作实例变量,我最终将在多个类中对其进行声明?
静态变量主要用于常量。
在这里,您声明了static并为其分配了实例SimpleDateFormat。
使DATE_TIME_FORMAT 非静态或为该变量分配一个常量。
最好将其更改为实例变量,然后使用Sting做到这一点。
例如
public final String DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss:SSS";
触发规则为S2885:
非线程安全字段不应该是静态的
鱿鱼:S2885
并非标准 Java 库中的所有类都被编写为线程安全的。以多线程方式使用它们极有可能在运行时导致数据问题或异常。当 Calendar、DateFormat、javax.xml.xpath.XPath 或 javax.xml.validation.SchemaFactory 的实例被标记为静态时,此规则会引发问题。
由于SimpleDateFormat不是线程安全的,因此不能很好地在线程之间共享。您很可能最终会得到错误的日期格式。
如果您使用的是 Java 8 或更高版本,则应使用DateTimeFormatter,如本答案所示。否则,根据这个答案,使用 Joda Time 是有意义的。
作为旁注,拥有一个名为Constantsend的类让它包含各种静态最终变量几乎没有意义。通常你应该把每个常量放在它所属的地方。
| 归档时间: |
|
| 查看次数: |
628 次 |
| 最近记录: |