在我的代码中,我有以下行:
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那里得到以下提及:
使“形状”暂时或可序列化。可序列化类中的字段本身必须是可序列化的或瞬态的,即使该类从未显式序列化或反序列化。这是因为在负载下,大多数J2EE应用程序框架都会将对象刷新到磁盘,而一个据称具有非瞬态、非序列化数据成员的可序列化对象可能会导致程序崩溃,并为攻击者打开大门。
据我所知,int[](和int[][]等)是可序列化的。这是sonarqube中的一个bug还是我误解了基本类型数组的可序列化性?
编辑:添加了它所在的枚举,以防枚举类型相关
正如@Simon Brandhof的评论中提到的,这确实是所选规则中的一个错误。
该问题是由于原语不被检查视为可序列化。票https://jira.codehaus.org/browse/SONARJAVA-918将修复此问题。感谢您的报道。
问题内容: 如下代码: 引发以下异常: 我猜内部类具有一个允许对其私有访问的字段和方法的字段。声明内部类static 可以解决它,但是如果需要此访问权限怎么办?有没有一种方法可以在不包含封闭类的情况下序列化非静态内部类,例如通过引用外部类? 编辑:例如,仅在序列化之前才需要访问外部类。好的,编译器不知道这一点,但是我认为这就是关键字存在的原因。 问题答案: 如果InnerClass需要此访问权限怎
我在一个项目中工作,然后创建了一个新项目,在打开旧项目后,它不被识别为java项目。没有在包中创建类的选项(如您在pic上所见),空的中间包不会隐藏,但该选项被设置为on。 为什么intelij-idea不认可java项目?
问题内容: 根据Java文档中的Serializability: 通过实现java.io.Serializable接口的类,可以启用类的可序列化性。未实现此接口的类将不会对其状态进行序列化或反序列化。可序列化类的所有子类型本身都是可序列化的。序列化接口没有方法或字段,仅用于标识可序列化的语义 为什么对象尚未实现?我们不希望可序列化的成员可以设为。为什么要阻止默认的Serializability?
我试图在Java中序列化,但在运行我的程序时,我收到一个。 查看类,我注意到它没有实现。 为什么不实现?
问题内容: 为什么认为超出范围,而低于int ? 问题答案: 在Java和其他几种语言中,以开头的整数文字0被解释为八进制(基数8)的数量。 对于单位数(比其他和,这是不允许的),结果是一样的,所以你可能没有意识到他们被解释为八进制。但是,如果你写的数字的有效位数不止一个,那么结果可能会让你感到困惑。 例如: 由于八进制文字通常不是你想要的,因此请务必小心,切勿以开头的整数文字0,除非你当然实际上
如果接口只是一个标记接口,用于在 java 中传递有关类的某种元数据 - 我有点困惑: 在阅读了java的序列化算法(元数据从下到上,然后从上到下的实际实例数据)的过程之后,我无法真正理解哪些数据不能通过该算法进行处理。 简而言之: 哪些数据可能导致? 我怎么知道我不应该为我的类添加子句?