美文网首页
写好代码,迎娶白富美

写好代码,迎娶白富美

作者: coder_liu | 来源:发表于2017-08-15 14:52 被阅读0次

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

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

 private void getFileNameMap(Class c, String year, String type,
        Map<String, Object> 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个多余的对象,浪不浪费资源。(如果你说你是这样的豪
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一个出来,浪不浪费资源。可以用表驱动完善吧。不知道表驱动是啥,请问度娘。 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;
        }
    }
写代码的时候稍微正常逻辑也不失为一件好事情,这种负负得正的逻辑看着你不晕么?
beaf7239114a4ba1a500dd0967938815.png

4. 谨慎使用while

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

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

相关文章

  • 写好代码,迎娶白富美

    以下代码是项目、产品中真实存在代码。小编是写过垃圾代码的程序猿,小编也是看过别人写垃圾代码的程序猿。为了写好代码也...

  • 迎娶白富美

    从有记忆开始,爱情就是一种世上歌颂不完的美,是人类乃至世间所有生命里世代相传永远被传颂之物。 我在很小的时候从各种...

  • 因为吹牛,小伙迎娶了白富美,成为人生赢家

    因为吹牛,小伙迎娶了白富美,成为人生赢家

  • 你的功成名就,是因为加了一个1500块的微信群么?

    为了更好的升职加薪成为白富美,或者迎娶白富美,PPT课堂、EXCEL课程、知乎大V分享视频、写作营等等,“xiu”...

  • 对联|南柯一梦

    上联:癞蛤蟆想吃天鹅肉 下联:穷屌丝迎娶白富美

  • Java技能图

    据说下面图的技能都掌握,就能升职加薪,迎娶白富美,走上人生巅峰!

  • 变成高富帅,迎娶白富美

    金钱人人喜,美女人人爱,几乎没有例外。 韦小宝就是典型的代表,从社会的最底层逐渐变成了“高富帅”,抱得美人归。 《...

  • 春之开挂的人生

    也许每个男人都有一个Dream of,做个高富帅,迎娶白富美,当个CEO,从此走向人生巅峰,当然我也不外如是。然...

  • 幻想狂人,杨,杨,杨电风

    电风是一个幻想狂人,没事的时候就喜欢瞎寻思。比如他尝尝幻想着自己迎娶白富美的画面,然后顺带着继承白富美家里的公司,...

  • 人生:所有的前戏都是为了终极一炮

    职场人的终极理想,不外乎是成为高富帅,出任CEO,迎娶白富美。成为高富帅,由于已过青春期,身高样貌几乎定型,想要突...

网友评论

      本文标题:写好代码,迎娶白富美

      本文链接:https://www.haomeiwen.com/subject/oyxvrxtx.html