SonarLint V3:"Serializable" class 中的字段对于 List 接口应该是瞬态的或可序列化的
SonarLint V3: Fields in a "Serializable" class should either be transient or serializable for List interface
我的问题与this非常相似,除了这个问题我在SonarLint V3 (squid:S1948)中遇到过。
我的代码是:
public class Page<T> implements Serializable {
Summary summary;
List<T> elements;
public Page() {
summary = new Summary();
}
public List<T> getItemsReceived() {
return elements;
}
public void setItemsReceived(List<T> list) {
this.elements = list;
}
public Summary getSummary() {
return summary;
}
public void setSummary(Summary summary) {
this.summary = summary;
}
}
摘要对象实现可序列化。
public class Summary implements Serializable {
int offset;
int limit;
long totalElements;
public int getOffset() {
return offset;
}
public void setOffset(int offset) {
this.offset = offset;
}
public int getLimit() {
return limit;
}
public void setLimit(int limit) {
this.limit = limit;
}
public long getTotalNumberOfElements() {
return totalElements;
}
public void setTotalNumberOfElements(long totalNumberOfElements) {
this.totalElements = totalNumberOfElements;
}
}
现在,如果我用 ArrayList 替换 List,那么 SonarLint 中会出现另一个警告,我们应该使用接口而不是实现 类。
我认为这可能在 SonarQube 中得到解决,但对于 SonarLint 我不知道。
这是错误还是我做错了什么?
SonarLint 是对的。问题是不能保证 elements
字段是可序列化的。您需要在 T
类型上添加绑定类型
public class Page<T extends Serializable> implements Serializable {}
如果为它选择的实现是可序列化的(这对于 Java 中的标准集合类型是正确的),那么列表将是可序列化的。
我的问题与this非常相似,除了这个问题我在SonarLint V3 (squid:S1948)中遇到过。
我的代码是:
public class Page<T> implements Serializable {
Summary summary;
List<T> elements;
public Page() {
summary = new Summary();
}
public List<T> getItemsReceived() {
return elements;
}
public void setItemsReceived(List<T> list) {
this.elements = list;
}
public Summary getSummary() {
return summary;
}
public void setSummary(Summary summary) {
this.summary = summary;
}
}
摘要对象实现可序列化。
public class Summary implements Serializable {
int offset;
int limit;
long totalElements;
public int getOffset() {
return offset;
}
public void setOffset(int offset) {
this.offset = offset;
}
public int getLimit() {
return limit;
}
public void setLimit(int limit) {
this.limit = limit;
}
public long getTotalNumberOfElements() {
return totalElements;
}
public void setTotalNumberOfElements(long totalNumberOfElements) {
this.totalElements = totalNumberOfElements;
}
}
现在,如果我用 ArrayList 替换 List,那么 SonarLint 中会出现另一个警告,我们应该使用接口而不是实现 类。
我认为这可能在 SonarQube 中得到解决,但对于 SonarLint 我不知道。 这是错误还是我做错了什么?
SonarLint 是对的。问题是不能保证 elements
字段是可序列化的。您需要在 T
类型上添加绑定类型
public class Page<T extends Serializable> implements Serializable {}
如果为它选择的实现是可序列化的(这对于 Java 中的标准集合类型是正确的),那么列表将是可序列化的。