为什么SonarQube认为int [] [] []不可序列化

时间:2015-02-21 01:22:33

标签: java sonarqube serializable

在我的代码中,我有以下一行:

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中的错误还是我误解了基本类型数组的可序列化?

编辑:添加了它所存在的枚举,以防枚举类型相关

1 个答案:

答案 0 :(得分:1)

如@Simon Brandhof的评论所述,这确实是所选规则中的一个错误。

问题是由于基元不被检查视为可序列化的事实。 票证https://jira.codehaus.org/browse/SONARJAVA-918将解决此问题。 感谢您的报道。