feilong-core 亮点

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

    你需要这么写

    总感觉怪怪的, 很烦人

    你现在可以这么写

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

    一行代码,轻松快乐的写代码

    同样,下面的代码

    1. List<Long> 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);

    依然,可以简写

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

    PS:如果使用 import static 代码可以更简洁

    1.2 CollectionsUtil.getPropertyValueList(Collection<O>, String)

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

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

    这段代码,可以一行代码搞定

    1. //...
    2. List<Long> idList =CollectionsUtil.getPropertyValueList(salesOrderPage, "id");
    3. //查询订单行
    4. List<OrderLineCommand> allLineList = sdkOrderLineDao.findOrderDetailListByOrderIds(idList);

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

    众所周知,JAVA 有 checked exceptionuncheckedException 之分,也就是我们常说的 RuntimeExceptionException

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

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

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

    这理论上是 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;
    4. }

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

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

    源码示例:

    1. /**
    2. * 计算两个时间相差的的天数(<span style="color:red">绝对值</span>).
    3. *
    4. * <h3>说明:</h3>
    5. * <blockquote>
    6. * <p>
    7. * 值=两个时间相差毫秒的绝对值/{@link TimeInterval#MILLISECOND_PER_DAY}
    8. * </p>
    9. * </blockquote>
    10. *
    11. * <h3>示例:</h3>
    12. *
    13. * <blockquote>
    14. *
    15. * DateExtensionUtil.getIntervalDay(
    16. * toDate("2008-08-24",COMMON_DATE),
    17. * toDate("2008-08-27",COMMON_DATE)) = 3
    18. *
    19. * toDate("2016-08-21 12:00:00",COMMON_DATE_AND_TIME),
    20. * toDate("2016-08-22 11:00:00",COMMON_DATE_AND_TIME)) = 0
    21. *
    22. * DateExtensionUtil.getIntervalDay(
    23. * toDate("2016-08-21",COMMON_DATE),
    24. * toDate("2016-08-22",COMMON_DATE)) = 1
    25. *
    26. * DateExtensionUtil.getIntervalDay(
    27. * toDate("2016-02-28",COMMON_DATE),
    28. * toDate("2016-03-02",COMMON_DATE)) = 3
    29. *
    30. * DateExtensionUtil.getIntervalDay(
    31. * toDate("2016-08-31",COMMON_DATE),
    32. * toDate("2016-09-02",COMMON_DATE)) = 2
    33. *
    34. * </pre>
    35. *
    36. * </blockquote>
    37. *
    38. * @param date1
    39. * date1
    40. * @param date2
    41. * date2
    42. * @return 如果 <code>date1</code> 是null,抛出 {@link NullPointerException}<br>
    43. * 如果 <code>date2</code> 是null,抛出 {@link NullPointerException}
    44. * @see #getIntervalTime(Date, Date)
    45. * @see #getIntervalDay(long)
    46. * @since 1.6.0
    47. */
    48. public static int getIntervalDay(Date date1,Date date2){
    49. }

    如果你使用maven的话,只需要在依赖的jar 右键, maven—> download javadoc 或者 download sources 会自动下载

    feilong-core 亮点 - 图2

    方法实现之后,有上述的javadoc 详细的描述这个方法的作用 特点,注意点等, 那么怎么证明你写的东西都是正确而胡编乱造的呢?

    我们有详细的 junit 单元测试, 每次构建的时候,都会经过maven 的单元测试周期

    比如 MapUtilGetSubMapTest