类名使用UpperCamelCase风格, 但以下情形例外: DO / BO / DTO / VO / AO / PO 等, 如UserDO等。在阿里巴巴Java编程规范中POJO(Plain Ordinary Java Object)专指只有setter / getter / toString 的简单类, 包括DO / BO / DTO / VO 等, 禁止命名成xxxPOJO。
定义DO / DTO / VO 等POJO类时, 不要设定任何属性默认值。
定义数组: 类型与中括号紧挨相连来定义, 如int[] arrayDemo, 不能使用“String args[]”这种方式。
包名统一使用小写, 单数形式; 类名如果有复数含义,可以使用复数形式;例如:包名com.alibaba.ai.util, l类名MessageUtils。
任何二目、三目运算符的左右两边都需要加一个空格, 注意一目运算++ 是不需要加空格的。
单行字符数限制不超过120个, 单个方法的总行数不超过80行。
序列化类新增属性时, 请不要修改serialVersionUID字段, 避免反序列化失败; 如果完全不兼容升级, 避免反序列化混乱, 那么请修改serialVersionUID值。
慎用Object的clone方法/BeanUtil的copy方法来拷贝对象, 若想实现深拷贝需要重写clone方法实现属性对象的拷贝。
ArrayList的subList的类型是java.util.RandomAccessSubList, 是ArrayList的一个视图, 不能强转成ArrayList; 对于SubList子列表的所有操作最终会反映到原列表上; 对原列表的修改, 会导致子列表的遍历、增加、删除均会产生ConcurrentModificationException异常; 同时, subList没有实现Serializable接口, 若RPC接口的List类型参数接受了SubList类型的实参,则在RPC调用时会报出序列化异常。比如我们常用的guava中的