有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

这可能是java的可序列化问题。时间API

使用LocalDataTimeLocalDate,它们是实现Serializable接口的类中的Serializable类。SonarQube报告说,虽然代码已经实现了Serializable接口,但代码应该更新为“使sampleDateObject”瞬态或可序列化。有什么解决问题的建议吗

public class SampleData implements Serializable {

...
private LocalDateTime sampleDateObject;

public LocalDateTime getSampleDateObject() {
        return sampleDateObject;
    }

    public void setSampleDateObject(LocalDateTime sampleDateObject) {
        this.sampleDateObject= sampleDateObject;
    }
 .....
}

以下是来自Java1.8API的代码片段

public final class LocalDateTime
        implements Temporal, TemporalAdjuster, ChronoLocalDateTime<LocalDate>, Serializable {
....
}

下面是SonarQube在未能将java元素标识为可序列化时的描述,我看到的错误是“使”sampleDateObject“暂时或可序列化”

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;
}

共 (0) 个答案