Java开发规范(公司规范) 下载本文

OverrideBothEqualsAndHashCode

? 规则级别:

Error High ? 违规示例代码:

//该AgcDataInfo没有override equals方法 public class AgcDataInfo {

Public AgcDataInfo(String planUnitNo) {

if(planUnitNo!=null)

this.planUnitNo = planUnitNo;

}

//机组名称

String planUnitNo=””; /**

* 生成hash值 */

public int hashCode() {

return this.getPlanUnitNo().hashCode(); }

/**自动生成get,set方法

public String getPlanUnitNo() {

return planUnitNo; }

public void setPlanUnitNo(String planUnitNo) {

if(planUnitNo!=null)

this.planUnitNo = planUnitNo; } }

public void main(String[] args) {

Collection v=new Vector(); Map map=new Hashtable();

AgcDataInfo t1=new AgcDataInfo(“test”); AgcDataInfo t2=new AgcDataInfo(“test”); v.add(t1);

map.put(t1,“test“); map.put(t2,“test“); //false而不是true

System.out.println(v.contains(t2));

//2而不是1

System.out.println(map.size()); }

? 合法代码示例:

public class AgcDataInfo

{

Public AgcDataInfo(String planUnitNo) {

if(planUnitNo!=null)

this.planUnitNo = planUnitNo;

}

//机组名称

String planUnitNo=””; /**

* 比较等式,比较值为下达时间,下达功率,机组名称 */

public boolean equals(Object o) {

if (o instanceof AgcDataInfo) {

AgcDataInfo data = (AgcDataInfo) o;

return his.getPlanUnitNo().equals(data.getPlanUnitNo());

}

return false; }

/**

* 生成hash值 */

public int hashCode() {

return this.getPlanUnitNo().hashCode(); }

/**自动生成get,set方法

public String getPlanUnitNo() {

return planUnitNo; }

public void setPlanUnitNo(String planUnitNo) {

if(planUnitNo!=null)

this.planUnitNo = planUnitNo;

} }

public void main(String[] args) {

Collection v=new Vector(); Map map=new Hashtable();

AgcDataInfo t1=new AgcDataInfo(“test”); AgcDataInfo t2=new AgcDataInfo(“test”); v.add(t1);

map.put(t1,“test“); map.put(t2,“test“); //true

System.out.println(v.contains(t2)); //1

System.out.println(map.size()); } 3.2.6

懒式方式创建对象:不能采用双检查惯用法

? 规范描述:

双检查一般用于c,c++懒式方式获得资源时惯用模式,但在java中该模式是不适用的,因为java创建对象时,先将对象创建后,直接将指针赋予给变量,然后才进行后续的初始化,在初始化这段空白期中,如果另外的线程获得该对象的引用,调用该对象,会产生一些不可预测的结果。 ? PMD规则名称:

DoubleCheckLock

? 规则级别:

Error High ? 违规示例代码 public class Foo { Object baz; Object bar() {

if(baz == null) { //baz may be non-null yet not fully created synchronized(this){ if(baz == null){

baz = new Object(); } } }

return baz; }

}

? 合法代码示例: public class Foo{ Object baz; Object bar() {

synchronized(this){ if(baz == null){

baz = new Object(); } }

return baz; } } 3.2.7

不能在finally中返回值。

? 规范描述:

finally中是必须执行的程序块,如果在里面返回,则表示该方法返回值只能为这个,其他地方返回值可能无效。 ? PMD规则名称:

ReturnFromFinallyBlock

? 规则级别:

Error High ? 违规示例代码:

public int foo(String value) { try {

return Integer.parseInt(value); } catch (Exception e) { return 0;; } finally {

return -1; // Very bad. } }

? 合法代码示例:

public int foo(String value) { int ret=0; try {

ret= Integer.parseInt(value); } catch (Exception e) { ret= 0;

} finally {

//处理其他事宜 ……