版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。
评论: Migration of unmigrated content due to installation of a new plugin

...

【规范】 不允许任何魔法值( 即未经定义的常量 ) 直接出现在代码中。

反例:

信息

String key =” Id # taobao _”+ tradeId;

cache . put(key , value);

#格式规约

【风格】单行太长需换行

【风格】方法体内的执行语句组、变量的定义语句组、不同的业务逻辑之间或者不同的语义之间插入一个空行。相同业务逻辑和语义之间不需要插入空行。

...

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

反例:

...

信息

List<String>

...

a

...

=

...

new

...

ArrayList<String>();

...

a.add(

...

“1”);

...

a.add(

...

“2”);

...

for

...

(String

...

temp

...

:

...

a)

...

{

...

if(

...

“1”.equals(temp)){

...

a.remove(temp);

...

}

}

说明:以上代码的执行结果肯定会出乎大家的意料,那么试一下把“1”换成“2”,会是同样的结果吗?(java.util.ConcurrentModificationException)

...

正例:

...

Iterator<String>

...

it

...

=

...

a.iterator();

...

while(it.hasNext()){

...

String

...

temp

...

=

...

it.next();

...

if(删除元素的条件){

...

it.remove();

...

}

}


【规范】集合初始化时,尽量指定集合初始值大小。

说明: ArrayList 尽量使用 ArrayList(int initialCapacity) 初始化。

【规范】使用 entrySet 遍历 Map 类集合 KV,而不是 keySet 方式进行遍历。

说明: keySet 其实是遍历了 2 次,一次是转为 Iterator 对象,另一次是从 hashMap 中取出 key 所对应的 value。而 entrySet 只是遍历了一次就把 key 和 value 都放到了 entry 中,效 率更高。 如果是 JDK8,使用 Map.foreach 方法。

Wiki 标记
Map<String, String> map = new HashMap<String, String>();

map.put("1", "@@");

map.put("2", "##");

/

\* JDK8推荐使用

*/

map.forEach((K, V) -> {

    System.out.println("Key : " + K);

    System.out.println("Value : " + V);

});

/

\* foreach推荐使用

*/

for (Map.Entry<String, String> entry : map.entrySet()) {

    System.out.println("Key : " + entry.getKey());

    System.out.println("Value : " + entry.getValue());

}

/

\* 不推荐使用

*/

for (String key : map.keySet()) {

    System.out.println("Key : " + key);

    System.out.println("Value : " + map.get(key));

}

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

...

【规范】创建线程或线程池时请指定有意义的线程名称,方便出错时回溯。

正例:

信息

public class TimerTaskThread extends Thread {
public TimerTaskThread() {

super.setName(“TimerTaskThread”);

...


}
}

【规范】线程资源必须通过线程池提供,不允许在应用中自行显式创建线程。

...