Feilong-core,一个让Java开发更简便的工具包

 还是那句话,既然吃了面向对象编程这碗饭,能不重复造轮子就尽量不造,今天介绍一款Java开发工具包feilong-core

一、背景

在JAVA开发过程中,经常看到小伙伴直接从网上copy一长段代码来使用,又或者写的代码很长很长很长...

痛点在于

  • 难以阅读
  • 难以维护
  • sonar扫描结果债务长
  • codereview 被小伙伴鄙视
  • ....

feilong-core focus on J2SE是feilong platform的核心项目,创建于2008年

愿景: Reduce development,Release ideas (减少开发,释放思想), 希望可以减少书写重复且繁杂的代码,让你从大量重复的底层代码中脱身,提高工作效率;多思考业务的完整性,让你的代码更简炼,易写、易读、易于维护;

经过多个版本迭代,已经逐步走向稳定

二、feilong-core介绍

1. 简介:

  • 让你从大量重复的底层代码中脱身,提高工作效率;
  • 让你的代码更简炼,易写、易读、易于维护;

2. feilong-core 优点:

使用 feilong-core 的理由

  • 有常用的工具类 (如 小巧实用日期处理 - DateUtil ,集合处理利器 - CollectionsUtil 等)
  • 有常用的JAVA常量类 (如 常用时间模式 — DatePattern , 常用时间间隔 —TimeInterval 等)
  • 不必要的Exception 转成了RuntimeException,减少不必要的代码
  • 国内中文注释最完善的API
  • 有完善的单元测试

3. feilong-core亮点之处

  • 有常用专属工具类 (如处理日期的 DateUtil,处理集合的CollectionsUtil,类型转换的ConvertUtil 等等等)
  • 有常用JAVA常量类 (如日期格式 DatePattern, 时间间隔 TimeInterval 等等等)
  • 不必要的Exception 转成RuntimeException,减少不必要的代码
  • 国内中文注释最完善的API
  • 有完善的单元测试

4. feilong-core工具包大全

feilong-core工具包

5. 部分功能图解

feilong-core功能图解

三、feilong-core常用API操作

1. ConvertUtil操作集合工具类

以前调用某个api时,该api需要一个list参数,但是你现在只有单对象,这个场景你的代码会怎么写?

以前你要这么写:

 
 
 
 
  1. List itemIds = new ArrayList<>(); 
  2. itemIds.add(itemId); 
  3.  
  4. sdkItemManager.findItemImageByItemIds(itemIds); 

现在你可以这么写:

 
 
 
 
  1. sdkItemManager.findItemImageByItemIds(ConvertUtil.toList(itemId)); 

使用ConvertUtil.toList()方法,你只需要一行代码就可以搞定,代码简洁又清爽。

同样,下面的代码

以前你是这么写:

 
 
 
 
  1. List skuIds = new ArrayList<>(); 
  2. skuIds.add(9L); 
  3. skuIds.add(10L); 
  4. skuIds.add(13L); 
  5. skuIds.add(18L); 
  6. skuIds.add(20L); 
  7. BundleValidateResult result = bundleManager.validateBundle(skuIds); 

现在你可以简写:

 
 
 
 
  1. List skuIds=ConvertUtil.toList(9L, 10L, 13L, 18L, 20L); 
  2. BundleValidateResult result = bundleManager.validateBundle(skuIds); 

代码的可读性更高,更简洁

2.CollectionsUtil.getPropertyValueList(Collection, String)

CollectionsUtil.getPropertyValueList(Collection , String) : 表示简化循环遍历集合,取到对象指定的属性 propertyName 的值,然后调用list.add()方法添加到集合中,拼成 List(ArrayList) 这一过程

比如: 要提取SalesOrderCommand list里面的id属性组成 List

以前你要这么写:

 
 
 
 
  1. List salesOrderList = sdkOrderDao.findOrdersWithOutPage(sorts, searchParam); 
  2.  
  3. //... 
  4.  
  5. List idList = new ArrayList<>(salesOrderList.size()); 
  6. for (SalesOrderCommand cmd : salesOrderList){ 
  7.     idList.add(cmd.getId()); 
  8.  
  9. //查询订单行 
  10. List allLineList = sdkOrderLineDao.findOrderDetailListByOrderIds(idList); 

现在你可以这么写:

 
 
 
 
  1. List salesOrderList = sdkOrderDao.findOrdersWithOutPage(sorts, searchParam); 
  2.  
  3. //... 
  4.  
  5. List idList =CollectionsUtil.getPropertyValueList(salesOrderList, "id"); 
  6.  
  7. //查询订单行 
  8. List allLineList = sdkOrderLineDao.findOrderDetailListByOrderIds(idList); 

现在只需写CollectionsUtil.getPropertyValueList(salesOrderPage, "id") 这段代码,可以一行搞定 。

Tips: 相似的方法,还有CollectionsUtil.getPropertyValueSet(Collection , String)以及 CollectionsUtil.getPropertyValueMap(Collection , String, String)。

3. 不能不说的异常处理

众所周知,JAVA有checked exception 和 uncheckedException之分,也就是我们常说的 RuntimeException和 Exception。

checked exception有其使用场景,但是我们日常开发过程中,并没有对他做特殊的代码处理

比如,大部分小伙伴的代码是这样的:

 
 
 
 
  1. public ContactCommand toContactCommand(ContactCommand command) { 
  2.     try { 
  3.         BeanUtils.copyProperties(command, this); 
  4.     } catch (Exception e){ 
  5.         log.error("", e); 
  6.         //or e.printStackTrace(); 
  7.     } 
  8.     return command; 

其实细究下来,上述代码是不合理的, 如果转换的时候出现了异常,这里就会出现数据没有转换过去的情况,

这理论上是 RuntimeException,但是org.apache.commons.beanutils.BeanUtils ``里面使用的是Exception,所以小伙伴不能不try... catch一下,可是catch `代码里面有可能仅仅写了log记录,这有可能会出现逻辑问题 (本来需要抛出异常让事务回滚)。

这时可以使用com.feilong.core.bean.BeanUtil

 
 
 
 
  1. public ContactCommand toContactCommand(ContactCommand command){ 
  2.     com.feilong.core.bean.BeanUtil.copyProperties(command, this); 
  3.     return command; 

当然,如果你确定copy的对象相同属性名称的类型是一致的,你可以使用 PropertyUtil,可以有效的避免不必要的类型转换,提高效率

代码简洁,而且内部包装成的是自定义的 BeanOperationException(RuntimeException),如果需要特殊处理,依然可以 try...catch...

4. 有丰富的javadoc

调用方法的时候,可以清晰的感知这个方法的 作用,示例,说明点,参数,返回值,异常等信息。

源码示例:

 
 
 
 
  1. /** 
  2.  * 计算两个时间相差的的天数(绝对值). 
  3.  *  
  4.  * 

    说明:

     
  5.  * 
     
  6.  * 

     

  7.  * 值=两个时间相差毫秒的绝对值/{@link TimeInterval#MILLISECOND_PER_DAY} 
  8.  * 

     
  9.  *  
  10.  *  
  11.  * 

    示例:

     
  12.  *  
  13.  * 
     
  14.  *  
  15.  *  
  16.  * DateExtensionUtil.getIntervalDay( 
  17.  *      toDate("2008-08-24",COMMON_DATE), 
  18.  *      toDate("2008-08-27",COMMON_DATE)) = 3 
  19.  *  
  20.  * DateExtensionUtil.getIntervalDay( 
  21.  *      toDate("2016-08-21 12:00:00",COMMON_DATE_AND_TIME), 
  22.  *      toDate("2016-08-22 11:00:00",COMMON_DATE_AND_TIME)) = 0 
  23.  *  
  24.  * DateExtensionUtil.getIntervalDay( 
  25.  *      toDate("2016-08-21",COMMON_DATE), 
  26.  *      toDate("2016-08-22",COMMON_DATE)) = 1 
  27.  *       
  28.  * DateExtensionUtil.getIntervalDay( 
  29.  *      toDate("2016-02-28",COMMON_DATE), 
  30.  *      toDate("2016-03-02",COMMON_DATE)) = 3 
  31.  *  
  32.  * DateExtensionUtil.getIntervalDay( 
  33.  *      toDate("2016-08-31",COMMON_DATE), 
  34.  *      toDate("2016-09-02",COMMON_DATE)) = 2 
  35.  *  
  36.  * 
 
  •  *  
  •  *  
  •  *  
  •  * @param date1 
  •  *            date1 
  •  * @param date2 
  •  *            date2 
  •  * @return 如果 date1 是null,抛出 {@link NullPointerException}
     
  •  *         如果 date2 是null,抛出 {@link NullPointerException} 
  •  * @see #getIntervalTime(Date, Date) 
  •  * @see #getIntervalDay(long) 
  •  * @since 1.6.0 
  •  */ 
  • public static int getIntervalDay(Date date1,Date date2){ 
  •     return getIntervalDay(getIntervalTime(date1, date2)); 
  •  如果你使用maven的话,只需要在依赖的jar 右键,maven--> download javadoc 或者 download sources会自动下载。

    四、Maven使用配置

    1. 如果你是导入jar包到工程

    下载地址: https://github.com/venusdrogon/feilong-platform/tree/repository/com/feilong/platform/feilong-core

    2. 如果你是Maven构建

    • pom.xml引入feilong-core及仓库地址
     
     
     
     
    1.  
    2.         .... 
    3.          
    4.             2.1.0 
    5.             .... 
    6.          
    7.         .... 
    8.          
    9.              
    10.                 feilong-repository 
    11.                 https://raw.github.com/venusdrogon/feilong-platform/repository 
    12.              
    13.          
    14.         .... 
    15.          
    16.             .... 
    17.              
    18.                 com.feilong.platform 
    19.                 feilong-core 
    20.                 ${version.feilong-platform} 
    21.              
    22.             .... 
    23.          
    24.         .... 
    25.      

    3. feilong-util-all(全家桶,含IO操作,Net操作,Json,等工具类)

    • pom.xml引入feilong-util-all及仓库地址
     
     
     
     
    1.  
    2.  
    3.     .... 
    4.      
    5.         2.1.0 
    6.         .... 
    7.      
    8.  
    9.     .... 
    10.      
    11.          
    12.             feilong-repository 
    13.             https://raw.github.com/venusdrogon/feilong-platform/repository 
    14.          
    15.      
    16.  
    17.     .... 
    18.      
    19.         .... 
    20.          
    21.             com.feilong.platform 
    22.             feilong-util-all 
    23.             ${version.feilong-platform} 
    24.          
    25.         .... 
    26.      
    27.     .... 
    28.  

    五、feilong依赖的第三方包

    1. maven 依赖

     
     
     
     
    1.  
    2.         
    3.            org.apache.commons 
    4.            commons-lang3 
    5.            3.6 
    6.         
    7.         
    8.         
    9.            org.apache.commons 
    10.            commons-collections4 
    11.            4.1 
    12.         
    13.         
    14.         
    15.            commons-beanutils 
    16.            commons-beanutils 
    17.            1.9.3 
    18.         
    19.       

    2. 你也可以自行下载:

    commons-lang3

    • 官方地址: http://commons.apache.org/proper/commons-lang/download_lang.cgi
    • maven地址: http://search.maven.org/#search%7Cga%7C1%7Ca%3A%22commons-lang3%22%20AND%20g%3A%22org.apache.commons%22

    commons-collections4

    • 官方地址: http://commons.apache.org/proper/commons-collections/download_collections.cgi
    • 官方地址: http://search.maven.org/#search%7Cga%7C1%7Ca%3A%22commons-collections4%22%20AND%20g%3A%22org.apache.commons%22

    commons-beanutils

    • 官方地址: http://commons.apache.org/proper/commons-beanutils/download_beanutils.cgi
    • maven地址: http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22commons-beanutils%22%20AND%20a%3A%22commons-beanutils%22

    六、feilong-core API大纲

    七、参考
    feilong-core: http://feilong-core.mydoc.io/

    本文名称:Feilong-core,一个让Java开发更简便的工具包
    地址分享:http://www.csdahua.cn/qtweb/news38/322138.html

    网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

    广告

    声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网