写好代码,迎娶白富美

以下代码是项目、产品中真实存在代码。小编是写过垃圾代码的程序猿,小编也是看过别人写垃圾代码的程序猿。为了写好代码也是要拼的,废话不多说看代码吧!

1. 类A判断是否归属类B的判断

 private void getFileNameMap(Class c, String year, String type,
        Map map) throws Exception {
    if (c.newInstance() instanceof TJcxxzyptRmtjaj) {
        map.put("type", type);
    } else {
        map.put("type", BBMC_SBN.equals(type) ? ICodeConsts.BBTJ_SJ_SBN
                : ICodeConsts.BBTJ_SJ_QN);
    }
    map.put("class", c);
    map.put("year", year);
    }
每个调用此方法的地方,都需要利用反射机制newInstance出一个多余的对象,调用1w次就有1w个多余的对象,浪不浪费资源。(如果你说你是这样的豪
写好代码,迎娶白富美_第1张图片
79f4ca7ce5cb4647a4e3c3f0836a7ba5.png

,那么我shut up)应该会有人有疑惑,这个资源没有浪费,不是用于instanceof判断对象是否是TJcxxzyptRmtjaj类的实例了吗?重点来了。判断Class A是否是Class B或Class B的子子孙孙类(哈哈,大家能理解意思就行),请使用Class类提供的native方法isAssignableFrom,以下是一个简单的使用例子:

public class Test {
    public static void main(String[] args) {
        //这是用new instance-> instanceof方法
        try {
            boolean flag = B.class.newInstance() instanceof A;
            System.out.println("B newInstance instanceof A:"+flag);
            //输出结果:B newInstance instanceof A:true
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
       //以下使用class的isAssignableFrom方法
        boolean flag = A.class.isAssignableFrom(B.class);
        boolean StrFlag = String.class.isAssignableFrom(B.class);
        System.out.println("B isAssignableFrom A:"+flag);
        //输出结果:B isAssignableFrom A:true
        System.out.println("B isAssignableFrom String:"+StrFlag);
        //B isAssignableFrom String:false
        boolean acFlag = A.class.isAssignableFrom(C.class);
        System.out.println("A isAssignableFrom C:"+StrFlag);
       //输出结果:A isAssignableFrom C:true
    }
}
class A { 
}
class B extends A {
}
class C extends B {
}

解释一下:classA.isAssignableFrom(classB),当以下几种情况返回的是true:

  1. classA与classB指向的是同一个类
  2. classA是classB的父类或父接口

2. 善用表驱动

  public static IYaryProcess getDetailProcess(int yaxxType) {
        IYaryProcess yaryProcess = null;
        switch (yaxxType) {
            case YaJkConsts.YAXX_TYPE_GM:
                yaryProcess = new GmxxProcess();
                break;
            case YaJkConsts.YAXX_TYPE_VALIDATE:
                //由于立案风险的身份认证也需要返回具体的人员信息,所以在GmxxProcess类中都进行了处理
                yaryProcess = new GmxxProcess();
                break;
            case YaJkConsts.YAXX_TYPE_LS:
                yaryProcess = new LsxxProcess();
                break;
            case YaJkConsts.YAXX_TYPE_ZZJG:
                yaryProcess = new ZzjgxxProcess();
                break;
            case YaJkConsts.YAXX_TYPE_ZP:
                yaryProcess = new PictureProcess();
                break;
            default:
                yaryProcess = new GmxxProcess();
                break;
        }
        return yaryProcess;
    }
}
简单工厂设计模式看出来是学了。但是,没学好。为啥?因为每次获取detailProcess都需要new一个出来,浪不浪费资源。可以用表驱动完善吧。不知道表驱动是啥,请问度娘。
写好代码,迎娶白富美_第2张图片
ba3eb3531ade42a3950f3851b0469d1b.png

3. 反人类逻辑

  public void exec() {
        //判断当前时间是否在配置的开启定时任务的时间范围内
        if (!initStoreCacheRegion()) {
            return;
        }
    //此处省略100行代码
  }
  private boolean initStoreCacheRegion() {
        String region = ArteryConfigUtil.getProperty("ocr.tag.time.region");
        try {
            String[] regionParts = region.split(";");
            int hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
            return !(hour < Integer.parseInt(regionParts[0]) && hour >     Integer.parseInt(regionParts[1]));
        } catch (Exception e) {
            return false;
        }
    }
写代码的时候稍微正常逻辑也不失为一件好事情,这种负负得正的逻辑看着你不晕么?
写好代码,迎娶白富美_第3张图片
beaf7239114a4ba1a500dd0967938815.png

4. 谨慎使用while

do {
// 支持跨天显示
Date currDate = DateUtils.addDays(dKssj, index);
//中间省略几十行代码,无break代码
index++;
} while (!beginDateStr.equals(endDateStr))
这是一个真实在现场出现问题的代码,不是假如就是数据库中存在一条垃圾数据结束时间比开始时间要小,开始时间累加后不可能与结束时间相等,结果是核爆炸毁灭性质的——— 死循环。
写好代码,迎娶白富美_第4张图片
96c0ed41e89c4ddca0dfa87933a11e20.png
所以,使用while循环要验证数据的合理性,比如这里验证开始时间是否小于结束时间。

程序员写代码是工作,写好代码是义务,不浪费资源是责任!

你可能感兴趣的:(写好代码,迎娶白富美)