在我的代码中,我有以下一行:
private int[][][] shapes;
在野外它生活在一个枚举中:
public enum TetrisGamePiece {
private int id;
private int pieceColour;
private int[][][] shapes; // <-- This line is not accepted
private TetrisGamePiece(int id, int colour, int[][] shape1, int[][] shape2, int[][] shape3, int[][] shape4) {
this.id = id;
this.pieceColour = colour;
this.shapes = new int[][][]{shape1, shape2, shape3, shape4};
}
// ... the rest of the enum ...
// i've left out instantiation of objects to save space.
我从sonarqube得到以下提及:
使“形状”瞬态或可序列化。 Serializable中的字段 class必须是Serializable或者是瞬态的,即使是 class永远不会显式序列化或反序列化。那是因为 在负载下,大多数J2EE应用程序框架将对象刷新到磁盘, 和一个涉及非瞬态的Serializable对象, 不可序列化的数据成员可能导致程序崩溃,并打开 通往袭击者的大门。
据我所知,int [](和int [] []等)是可序列化的。这是sonarqube中的错误还是我误解了基本类型数组的可序列化?
编辑:添加了它所存在的枚举,以防枚举类型相关
答案 0 :(得分:1)
如@Simon Brandhof的评论所述,这确实是所选规则中的一个错误。
问题是由于基元不被检查视为可序列化的事实。 票证https://jira.codehaus.org/browse/SONARJAVA-918将解决此问题。 感谢您的报道。