JAVA-DIY-5-WEEK

Persistence is not necessarily successful, but not sure will not succeed.

Posted by Hyuga on March 28, 2019

第5周讨论主题:Java基本编程语法

写几行你觉得能代表你个人技术标签的Java代码

private enum ThreadPoolSingleton {
    /**
     * 线程池单例枚举
     */
    INSTANCE;

    private ExecutorService threadPoolService;

    ThreadPoolSingleton() {
        final ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("HYUGA-THREAD-POOL-%d").build();
        threadPoolService = new HyugaThreadPoolExecutor(2, 5, 60L,
                TimeUnit.SECONDS, new LinkedBlockingQueue<>(), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy());
        HYUGA_LOGGER.info("线程池初始化完成!!!");
    }

    public ExecutorService getSingleton() {
        return threadPoolService;
    }
}

这只是一段创建线程池的代码片段,但是这是我从懵懂清醒的起点,从一个小小的线程池创建,我不再满足于只是copy+c和copy+y,而是有了自己想法。

所以,这一小段代码虽不出彩,但却能代表我的个人技术标签和技术态度。

如何解决if-else多层嵌套的问题

以前待过一家公司,遇到过一个Controller的一个方法,具体干吗用的已经想不起来了,印象深刻的是里面的一堆if-else,足足有几百行,数量之大当真吓人。

如果是现在我来处理的话,我会考虑逐步重构:

  • 先按业务或者功能模块将这个方法进行切割,减少单个方法的代码量;
  • 删除无效的判断逻辑,简化代码;
  • 提取功能共性,进行必要的封装,采用合适的设计模式进行构造,比如:工厂模式、策略模式等;
  • 提出复杂的条件参数,提升判断语句的可阅读性;
  • 改写所有if(!condition)为if(condition),再次提升阅读体验;
  • 简化if嵌套层级,用&&替代多层if…if,或者使用if(condition){return;} …来简化过多的嵌套;
  • 考虑使用switch来替代已经较为简化的if…else

switch有哪些奇葩的脾气

  • 吃过一次大亏,case忘了写break;结果继续走到default执行去了,导致数据错误;
  • switch的case如果都不写break;的话,是会把所有任务都执行一边的,直到最终走到break;的地方才会退出,或者直接走完所有任务;
  • case支持的类型是char、byte、short、int、枚举 类型。在java SE7后才新增了字符串String类型;
  • 可以有0个、1个或多个case,但是只能有0个或1个default;