java规范(四)方法设计

规则3.【推荐】为了帮助阅读及方法内联,将小概率发生的异常处理及其他极小概率进入的代码路径,封装成独立的方法

if(seldomHappenCase) {
  hanldMethod();
}

try {
  ...
} catch(SeldomHappenException e) {
  handleException();
}

规则6.【推荐】下列情形,需要进行参数校验
1)调用频次低的方法。
2)执行时间开销很大的方法。此情形中,参数校验时间几乎可以忽略不计,但如果因为参数错误导致中间执行回退,或者错误,代价更大。
3)需要极高稳定性和可用性的方法。
4)对外提供的开放接口,不管是RPC / HTTP /公共类库的API接口。
如果使用Apache Validate或Guava Precondition进行校验,并附加错误提示信息时,注意不要每次校验都做一次字符串拼接。

//WRONG
Validate.isTrue(length > 2, "length is "+keys.length+", less than 2", length);
//RIGHT
Validate.isTrue(length > 2, "length is %d, less than 2", length);

规则8.【推荐】禁用断言做参数校验

断言断言仅用于测试环境调试,无需在生产环境时进行的校验。因为它需要增加-ea启动参数才会被执行。而且校验失败会抛出一个AssertionError的(属于错误,需要捕获的Throwable)
因此在生产环境进行的校验,需要使用Apache Commons Lang的Validate或Guava的前提条件。

规则9.【推荐】返回值可以为Null,可以考虑使用JDK8的可选类
不强制返回空集合,或者空对象。但需要添加注释充分说明什么情况下会返回空值。
本手册明确防止NPE是调用者的责任。即使被调用方法返回空集合或者空对象,对调用者来说,也并非高枕无忧,必须考虑到远程调用失败,序列化失败,运行时异常等场景返回空的情况。
JDK8的可选类的使用这里不展开。

规则11.【推荐】不能使用有继承关系的参数类型来重载方法
因为方法重载的参数类型是根据编译时表面类型匹配的,不根据运行时的实际类型匹配。

class A {
  void hello(List list);
  void hello(ArrayList arrayList);
}

List arrayList = new ArrayList();

// 下句调用的是hello(List list),因为arrayList的定义类型是List
a.hello(arrayList);

规则13.【推荐】不使用@Deprecated的类或方法
接口提供方既然明确是过时接口并提供新接口,那么作为调用方来说,有义务去考证过时方法的新实现是什么。
比如java.net.URLDecoder中的方法decode(String encodeStr)这个方法已经过时,应该使用双参数decode(String source,String encode)。

规则14.【推荐】不使用不稳定方法,如com.sun。包下的类,底层类库中内包下的类
com.sun.
,sun.*包下的类,或者底层类库中名称为内部的包下的类,都是不对外暴露的,可随时被改变的不稳定类。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值