阿里巴巴代码规范细节1

1. 不要在 foreach 循环里进行元素的 remove/add 操作。 remove 元素请使用 Iterator方式,如果并发操作,需要对 Iterator 对象加锁。

正例:

List<String> list = new ArrayList<>();
list.add("1");
list.add("2");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
if (删除元素的条件) {
iterator.remove();
}
}

反例: 

for (String item : list) {
   if ("1".equals(item)) {
   list.remove(item);
 }
}

2.使用 entrySet 遍历 Map 类集合 KV,而不是 keySet 方式进行遍历。说明: keySet 其实是遍历了 2 次,一次是转为 Iterator 对象,另一次是从 hashMap 中取出key 所对应的 value。而 entrySet 只是遍历了一次就把 key 和 value 都放到了 entry 中,效率更高。如果是 JDK8,使用 Map.foreach 方法。
正例: values()返回的是 V 值集合,是一个 list 集合对象; keySet()返回的是 K 值集合,是一个 Set 集合对象; entrySet()返回的是 K-V 值组合集合。

3.高度注意 Map 类集合 K/V 能不能存储 null 值的情况,如下表格:

    反例: 由于 HashMap 的干扰,很多人认为 ConcurrentHashMap 是可以置入 null 值,而事实上,存储 null 值时会抛出 NPE 异常。

4.java标准的命名规则,以后按照这种命名方式:

5.相同参数类型,相同业务含义,才可以使用 Java 的可变参数,避免使用 Object。
说明: 可变参数必须放置在参数列表的最后。 (提倡同学们尽量不用可变参数编程)
正例: public List<User> listUsers(String type, Long... ids) {...}

6.Object 的 equals 方法容易抛空指针异常,应使用常量或确定有值的对象来调用equals。
正例: "test".equals(object);
反例: object.equals("test");
说明: 推荐使用 java.util.Objects#equals(JDK7 引入的工具类)
7.循环体内,字符串的连接方式,使用 StringBuilder 的 append 方法进行扩展。
说明: 下例中, 反编译出的字节码文件显示每次循环都会 new 出一个 StringBuilder 对象,
然后进行 append 操作,最后通过 toString 方法返回 String 对象,造成内存资源浪费。
反例:

String str = "start";
for (int i = 0; i < 100; i++) {
    str = str + "hello";
}

8.final 可以声明类、成员变量、方法、以及本地变量,下列情况使用 final 关键字:
1) 不允许被继承的类,如: String 类。
2) 不允许修改引用的域对象。
3) 不允许被重写的方法,如: POJO 类的 setter 方法。
4) 不允许运行过程中重新赋值的局部变量。
5) 避免上下文重复使用一个变量,使用 final 描述可以强制重新定义一个变量,方便更好地进行重构。

 

猜你喜欢

转载自blog.csdn.net/zy345293721/article/details/82114746