加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

没落 Java 代码的“坏味道”

发布时间:2019-10-12 07:55:28 所属栏目:建站 来源:王超
导读:代码中的坏味道,如私欲如尘埃,天天都在增进,一日不去破除,便会越累越多。假如勤奋去破除这些坏味道,不只能进步本身的编码程度,也能使代码变得精白无一绝不彻。这里,一向从事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.     } 

(编辑:湖南网)

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

热点阅读