SonarQube提供以下错误:
使“类型”瞬态或可序列化。
在以下课程中:
@XmlRootElement
public class InsuredAmount<T extends IAType> implements Serializable {
private static final long serialVersionUID = 1L;
private T type;
}
IAType
是一个界面:
public interface IAType {
}
使用各种枚举实现,例如:
public enum OneIAType implements IAType, Serializable {
GENERIC
}
该类用于REST接口,因此它应该是Serializable。
我的问题: 1.我不认为将类型标记为瞬态是一个好主意,因为我通过REST接口传输此类。如果我将此类型标记为瞬态,是否会导致问题? 2.如何使类型可序列化?
答案 0 :(得分:3)
- 如果我将此类型标记为瞬态,是否会导致问题?
醇>
取决于您在反序列化实例后是否需要字段中的值。如果这样做,您可以将其标记为transient
,但您还需要其他方式来传输必要信息以重建远端type
的值。
- 如何使类型可序列化?
醇>
将类型变量声明为intersection type:
<T extends IAType & Serializable>
编辑:SonarQube似乎无法将此建议识别为可序列化类型。
它在问题中说接口的实现是枚举;这表明表达界限的另一种方式是:
<T extends Enum<T> & IAType>
请注意,所有枚举都是可隐式序列化的,因此Serializable
不必显式位于交集类型中。
事实证明这种方式有效,而第一种方式则不然:两种类型can be assigned to a variable of type Serializable
的引用。 (也许这是SonarQube中的一个错误?)