针对阿里巴巴代码规范新增java8的改动以及建议

  1. 【强制】在使用正则表达式时,利用好其预编译功能,可以有效加快正则匹配速度。 (如果不走预编译 则可能会导致如果多次调用 导致cpu飙升与此同时预编译对象必须作为全局变量或者成员变量)
    说明:不要在方法体内定义:Pattern pattern = Pattern.compile(“规则”);
  2. 【强制】注意 Math.random() 这个方法返回是 double 类型,注意取值的范围 0≤x<1(能够 取到零值,注意除零异常),如果想获取整数类型的随机数,不要将 x 放大 10 的若干倍然后 取整,直接使用 Random 对象的 nextInt 或者 nextLong 方法。
  3. 【强制】获取当前毫秒数 System.currentTimeMillis(); 而不是 new Date().getTime();
    说明:如果想获取更加精确的纳秒级时间值,使用 System.nanoTime()的方式。在 JDK8 中, 针对统计时间等场景,推荐使用 Instant 类。 (强制 :JDK8中同时对于时间的计算或者相关操作必须使用TimeUnit类 )
  4. 【推荐】及时清理不再使用的代码段或配置信息。
    说明:对于垃圾代码或过时配置,坚决清理干净,避免程序过度臃肿,代码冗余。
    正例:对于暂时被注释掉,后续可能恢复使用的代码片断,在注释代码上方,统一规定使用三 个斜杠(///)来说明注释掉代码的理由。
  5. 【推荐】(JDK8)对于集合处理 请优先使用Stream操作
    说明:Stream内置并行(Java里面最能发挥CPU多核性能的操作), 筛选 , 转换 , 排序 , 分流 , 替换 , 循环操作 丢弃某个元素 等等 且 对于基本数据类型 有其对应的特殊流 有更加强大的数学操作
  6. 【强制】(JDK8)如果使用流 必须进行注释说明
    说明:我喜欢的注释格式为 (流 -> 筛选出满足条件的 -> 将流中xxx转换成 xxx -> 对每个元素进行foreach调用)
  7. 【强制】(JDK8)如果使用lambda表达式 必须做到元素望文生义
    正例:某一个流lccontStream由lccont的list集合变过来 . 则 lccontStream.map(lccont -> lccont.getContNo()}),…….
    反例: lccontStream.map(a -> a.getContNo()}),
  8. 【强制】(JDK8)如果使用流 则流的名称必须是元素名称+Stream
    正例:某一个流lccontStream由lccont的list集合变过来
    反例: 某一个流aStream由lccont的list集合变过来
  9. 【推荐】(JDK8)接口设计无论如何优先考虑使用函数式接口(即接口里面只有一个抽象方法)
    说明: 如果是函数式接口请加@FuctionInterface注解
  10. 【推荐】(JDK8)如果对该接口的通用处理方法(不超过3个) 请在接口类里面直接写静态方法 大于三个请专门创建一个类 命名为 : 接口名称+Util 方法为public static
    说明: 通用处理方法是指的比如 有一个接口 A接口下有a抽象方法 则通用方法类似于
    Static( A a , xxx){B b = a.a(), 打印”b” }
  11. 【推荐】对于空值校验比较复杂或者预防空指针异常时 , 请使用Optional
    说明: 对于Optionals.ofNullAble(LCCont lccont).
  12. 【推荐】对于创建复杂对象且外部引起变化的变量是固定时 , 我们应该使用静态工厂拿你想要的获得的接口进行接收 隐藏具体的实现类 . (比如List litany = Collections.list(legacylitany );)
  13. 【推荐】对于创建复杂对象但外部因素可变时 , 使用静态内部类作为外部类的builder , 通过对内部类进行属性赋值 生成外部类对象 , 实现参数的可选 .
  14. 【推荐】对于变化是可控制的 把变化作成枚举 (可以使用享元设计模式), 如果变化不可控 必须使用依赖注入来实现代码
  15. 【强制】要坚决抵制创建不必要对象 通过单例或者享元/适配器/代理进行相关抽离
  16. 【强制】要使类仅仅暴露为最小的访问可能性
  17. 【强制】继承是一种脆弱的类之间关联关系 如果不是明确存在is a关系 更应该使用组合(如果使用继承必须使用相关文档加以说明)
    18 【强制】除非如果有成员变量在抽象类中存在 且需要在他的实现类使用 否则全部使用接口写 (配合util跟默认方法)
    19 【强制】除非确定变化可变 否则不允许使用标签类 更应该把标签抽象成抽象类或者接口
    20 【强制】注解优于命名模式
    21 【推荐】标记接口优于标记注解 (标记接口是编译时期检验 标记注解是运行时期校验)
    22 【推荐】方法引用优于lambda表达式比lambda表达式更为直观
    23 【推荐】要尽可能的将局部变量作用域最小化
    24 【推荐】理论上讲 要尽可能的将方法参数接口化
    25 【推荐】接口优先于反射(缺少编译时检查 并且需要构建厚重代码)
    26 【推荐】除类库外 应该首先考虑代码的易读性与健壮性 在考虑速度
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值