加入收藏 | 设为首页 | 会员中心 | 我要投稿 我爱故事小小网_铜陵站长网 (http://www.0562zz.com/)- 视频终端、云渲染、应用安全、数据安全、安全管理!
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

消灭 Java 代码的“坏味道”

发布时间:2019-10-15 22:14:25 所属栏目:优化 来源:王超
导读:副标题#e# 代码中的坏味道,如私欲如灰尘,每天都在增加,一日不去清除,便会越累越多。如果用功去清除这些坏味道,不仅能提高自己的编码水平,也能使代码变得精白无一毫不彻。这里,一直从事Java研发相关工作的阿里高级地图技术工程师王超,整理了日常工作

反例:

  1. public class User { 
  2.     public static final String CONST_NAME = "name"; 
  3.     ... 
  4.  
  5.  
  6. User user = new User(); 
  7. String nameKey = user.CONST_NAME; 

正例:

  1. public class User { 
  2.     public static final String CONST_NAME = "name"; 
  3.     ... 
  4.  
  5.  
  6. String nameKey = User.CONST_NAME; 

不要用NullPointerException判断空

空指针异常应该用代码规避(比如检测不为空),而不是用捕获异常的方式处理。

反例:

  1. public String getUserName(User user) { 
  2.     try { 
  3.         return user.getName(); 
  4.     } catch (NullPointerException e) { 
  5.         return null; 
  6.     } 

正例:

  1. public String getUserName(User user) { 
  2.     if (Objects.isNull(user)) { 
  3.         return null; 
  4.     } 
  5.     return user.getName(); 

使用String.valueOf(value)代替""+value

当要把其它对象或类型转化为字符串时,使用 String.valueOf(value) 比""+value 的效率更高。

反例:

  1. int i = 1; 
  2. String s = "" + i; 

正例:

  1. int i = 1; 
  2. String s = String.valueOf(i); 

过时代码添加 @Deprecated 注解

当一段代码过时,但为了兼容又无法直接删除,不希望以后有人再使用它时,可以添加 @Deprecated 注解进行标记。在文档注释中添加 @deprecated 来进行解释,并提供可替代方案。

正例:

  1. /** 
  2.  * 保存 
  3.  * 
  4.  * @deprecated 此方法效率较低,请使用{@link newSave()}方法替换它 
  5.  */ 
  6. @Deprecated 
  7. public void save(){ 
  8.     // do something 

让代码远离 bug

禁止使用构造方法 BigDecimal(double)

BigDecimal(double) 存在精度损失风险,在精确计算或值比较的场景中可能会导致业务逻辑异常。

反例:

  1. BigDecimal value = new BigDecimal(0.1D); // 0.100000000000000005551115... 

正例:

  1. BigDecimal value = BigDecimal.valueOf(0.1D);; // 0.1 

返回空数组和空集合而不是 null

返回 null ,需要调用方强制检测 null ,否则就会抛出空指针异常。返回空数组或空集合,有效地避免了调用方因为未检测 null 而抛出空指针异常,还可以删除调用方检测 null 的语句使代码更简洁。

反例:

  1. public static Result[] getResults() { 
  2.     return null; 
  3.  
  4.  
  5. public static List<Result> getResultList() { 
  6.     return null; 
  7.  
  8.  
  9. public static Map<String, Result> getResultMap() { 
  10.     return null; 
  11.  
  12.  
  13. public static void main(String[] args) { 
  14.     Result[] results = getResults(); 
  15.     if (results != null) { 
  16.         for (Result result : results) { 
  17.             ... 
  18.         } 
  19.     } 
  20.  
  21.  
  22.     List<Result> resultList = getResultList(); 
  23.     if (resultList != null) { 
  24.         for (Result result : resultList) { 
  25.             ... 
  26.         } 
  27.     } 
  28.  
  29.  
  30.     Map<String, Result> resultMap = getResultMap(); 
  31.     if (resultMap != null) { 
  32.         for (Map.Entry<String, Result> resultEntry : resultMap) { 
  33.             ... 
  34.         } 
  35.     } 

(编辑:我爱故事小小网_铜陵站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读