feilong-core,一个让Java开发更简便的工具包,极力推荐

2021年11月22日 阅读数:7
这篇文章主要向大家介绍feilong-core,一个让Java开发更简便的工具包,极力推荐,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

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

1、背景

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

痛点在于:github

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

feilong-core focus on J2SEfeilong platform的核心项目,建立于2008年web

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

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

2、feilong-core介绍

1. 简介:

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

2. feilong-core 优势:

使用 feilong-core 的理由api

3. feilong-core亮点之处

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

4. feilong-core工具包大全

在这里插入图片描述

5. 部分功能图解

在这里插入图片描述

3、feilong-core经常使用API操做

1. ConvertUtil操做集合工具类

之前调用某个api时,该api须要一个list参数,可是你如今只有单对象,这个场景你的代码会怎么写?maven

  • 之前你要这么写:
List<Long> itemIds = new ArrayList<>();
itemIds.add(itemId);

sdkItemManager.findItemImageByItemIds(itemIds);
  • 如今你能够这么写:
sdkItemManager.findItemImageByItemIds(ConvertUtil.toList(itemId));

使用ConvertUtil.toList()方法,你只须要一行代码就能够搞定,代码简洁又清爽。ide

一样,下面的代码svg

  • 之前你是这么写:
List<Long> skuIds = new ArrayList<>();
skuIds.add(9L);
skuIds.add(10L);
skuIds.add(13L);
skuIds.add(18L);
skuIds.add(20L);
BundleValidateResult result = bundleManager.validateBundle(skuIds);
  • 如今你能够简写:
List<Long> skuIds=ConvertUtil.toList(9L, 10L, 13L, 18L, 20L);
BundleValidateResult result = bundleManager.validateBundle(skuIds);

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

2. CollectionsUtil.getPropertyValueList(Collection, String)

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

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

  • 之前你要这么写:

List<SalesOrderCommand> salesOrderList = sdkOrderDao.findOrdersWithOutPage(sorts, searchParam);

//...

List<Long> idList = new ArrayList<>(salesOrderList.size());
for (SalesOrderCommand cmd : salesOrderList){
   
   
   
    
    
    idList.add(cmd.getId());
}

//查询订单行
List<OrderLineCommand> allLineList = sdkOrderLineDao.findOrderDetailListByOrderIds(idList);
  • 如今你能够这么写:

List<SalesOrderCommand> salesOrderList = sdkOrderDao.findOrdersWithOutPage(sorts, searchParam);

//...

List<Long> idList =CollectionsUtil.getPropertyValueList(salesOrderList, "id");

//查询订单行
List<OrderLineCommand> allLineList = sdkOrderLineDao.findOrderDetailListByOrderIds(idList);

如今只需写CollectionsUtil.getPropertyValueList(salesOrderPage, "id") 这段代码,能够一行搞定 。

Tips: 类似的方法,还有CollectionsUtil.getPropertyValueSet(Collection<O>, String)以及 CollectionsUtil.getPropertyValueMap(Collection<O>, String, String)

3. 不能不说的异常处理

众所周知,JAVAchecked exceptionuncheckedException之分,也就是咱们常说的 RuntimeExceptionException

checked exception有其使用场景,可是咱们平常开发过程当中,并无对他作特殊的代码处理

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

public ContactCommand toContactCommand(ContactCommand command) {
   
   
   
    
    
    try {
   
   
   
    
    
        BeanUtils.copyProperties(command, this);
    } catch (Exception e){
   
   
   
    
    
        log.error("", e);
        //or e.printStackTrace();
    }
    return command;
}

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

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

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

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

固然,若是你肯定copy的对象相同属性名称的类型是一致的,你可使用 PropertyUtil,能够有效的避免没必要要的类型转换,提升效率

代码简洁,并且内部包装成的是自定义的 BeanOperationException(RuntimeException),若是须要特殊处理,依然能够 try…catch…

4. 有丰富的javadoc

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

  • 源码示例:
/**
 * 计算两个时间相差的的天数(<span style="color:red">绝对值</span>).
 * 
 * <h3>说明:</h3>
 * <blockquote>
 * <p>
 * 值=两个时间相差毫秒的绝对值/{@link TimeInterval#MILLISECOND_PER_DAY}
 * </p>
 * </blockquote>
 * 
 * <h3>示例:</h3>
 * 
 * <blockquote>
 * 
 * <pre class="code">
 * DateExtensionUtil.getIntervalDay(
 *      toDate("2008-08-24",COMMON_DATE),
 *      toDate("2008-08-27",COMMON_DATE)) = 3
 * 
 * DateExtensionUtil.getIntervalDay(
 *      toDate("2016-08-21 12:00:00",COMMON_DATE_AND_TIME),
 *      toDate("2016-08-22 11:00:00",COMMON_DATE_AND_TIME)) = 0
 * 
 * DateExtensionUtil.getIntervalDay(
 *      toDate("2016-08-21",COMMON_DATE),
 *      toDate("2016-08-22",COMMON_DATE)) = 1
 *      
 * DateExtensionUtil.getIntervalDay(
 *      toDate("2016-02-28",COMMON_DATE),
 *      toDate("2016-03-02",COMMON_DATE)) = 3
 * 
 * DateExtensionUtil.getIntervalDay(
 *      toDate("2016-08-31",COMMON_DATE),
 *      toDate("2016-09-02",COMMON_DATE)) = 2
 * 
 * </pre>
 * 
 * </blockquote>
 * 
 * @param date1
 *            date1
 * @param date2
 *            date2
 * @return 若是 <code>date1</code> 是null,抛出 {@link NullPointerException}<br>
 *         若是 <code>date2</code> 是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会自动下载。

4、Maven使用配置

1. 若是你是导入jar包到工程

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

2. 若是你是Maven构建

  • pom.xml引入feilong-core及仓库地址
 <project>
         ....
         <properties>
             <version.feilong-platform>2.1.0</version.feilong-platform>
             ....
         </properties>
         ....
         <repositories>
             <repository>
                 <id>feilong-repository</id>
                 <url>https://raw.github.com/venusdrogon/feilong-platform/repository</url>
             </repository>
         </repositories>
         ....
         <dependencies>
             ....
             <dependency>
                 <groupId>com.feilong.platform</groupId>
                 <artifactId>feilong-core</artifactId>
                 <version>${version.feilong-platform}</version>
             </dependency>
             ....
         </dependencies>
         ....
     </project>

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

  • pom.xml引入feilong-util-all及仓库地址
<project>

    ....
    <properties>
        <version.feilong-platform>2.1.0</version.feilong-platform>
        ....
    </properties>

    ....
    <repositories>
        <repository>
            <id>feilong-repository</id>
            <url>https://raw.github.com/venusdrogon/feilong-platform/repository</url>
        </repository>
    </repositories>

    ....
    <dependencies>
        ....
        <dependency>
            <groupId>com.feilong.platform</groupId>
            <artifactId>feilong-util-all</artifactId>
            <version>${version.feilong-platform}</version>
        </dependency>
        ....
    </dependencies>
    ....
</project>

5、feilong依赖的第三方包

1. maven 依赖

    <dependencies>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.6</version>
        </dependency>
        
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-collections4</artifactId>
            <version>4.1</version>
        </dependency>
        
        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>1.9.3</version>
        </dependency>
      </dependencies>

2. 你也能够自行下载:

6、feilong-core API大纲

在这里插入图片描述

7、参考

feilong-core: http://feilong-core.mydoc.io/

本文同步分享在 博客“Thinkingcao”(CSDN)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。