在实现LocalDataTime
接口的类中使用LocalDate
和Serializable
类Serializable
类。 SonarQube报告说,代码应该更新为“Make”sampleDateObject
“transient或serializable”,尽管它已经实现了Serializable
接口。有什么建议可以解决这个问题吗?
public class SampleData implements Serializable {
...
private LocalDateTime sampleDateObject;
public LocalDateTime getSampleDateObject() {
return sampleDateObject;
}
public void setSampleDateObject(LocalDateTime sampleDateObject) {
this.sampleDateObject= sampleDateObject;
}
.....
}
以下是Java 1.8 API的代码片段
public final class LocalDateTime
implements Temporal, TemporalAdjuster, ChronoLocalDateTime<LocalDate>, Serializable {
....
}
以下是SonarQube在无法将java元素标识为可序列化时的描述,我看到的错误是“Make”sampleDateObject“transient or serializable”..
Serializable
类中的字段本身必须是Serializable
或瞬态,即使该类从未显式序列化或反序列化。这是因为在负载下,大多数J2EE应用程序框架将对象刷新到磁盘,并且涉及具有非瞬态,非可序列化数据成员的Serializable
对象可能导致程序崩溃,并为攻击者打开大门。
不合规代码示例
public class Address {
//...
}
public class Person implements Serializable {
private static final long serialVersionUID = 1905122041950251207L;
private String name;
private Address address; // Noncompliant; Address isn't serializable
}
合规示例
public class Address implements Serializable {
private static final long serialVersionUID = 2405172041950251807L;
}
public class Person implements Serializable {
private static final long serialVersionUID = 1905122041950251207L;
private String name;
private Address address;
}