我发现离厕所远一点有一点好:在去厕所的路上经常会有idea出来,这篇文章就是其中之一。
言归正传,我对看到的别人的代码吐槽的想法由来已久。大部分时候,碍于情面不能直说。有时候委婉地说了,愿意听的当场改,大部分时候都我行我素。以至于我觉得写这些代码的时候是不是都是从北大青鸟出来的?
第一个:尤达表达式,null = someVariable(Java代码中)
我很敬佩从C/C++转到Java的人,但是我很看不起转过来了不学习相应语法的人。
第二个:collection.size() == 0
估计老师没教过collection.isEmpty()
第三个:StringUtils.equals(“foo”, someVariable)
公司规范的受害者,而且顽固不化。什么时候需要用工具类来比较,什么时候不需要分不清。
第四个:someMap.get(SomeConstains.ABC)出现多处
只有一处问题不大,多处不知道static import。
第五个
class Foo { String bar; } // in some method String bar = doStuff(); Foo foo = new Foo(); if(bar != null) { foo.bar = bar; }
多余的null判断。
第六个
if(StringUtils.isNotBlank(someMap.get(Constants.FOO))) { someBean.setFoo(someMap.get(Constants.FOO)); }
综合之前多个吐槽点的代码,Constants用静态导入,StringUtils建议也用静态导入,两次get明显可以抽取变量,你要知道这种代码充斥屏幕的感觉是多么的糟糕。
从另外一个角度,写这代码的人可能不知道StringUtils.trimToNull。
第七个
Set<String> someSet = doStuff(); for(String item : someSet) { if(StringUtils.equals("foo", item)) { return true; } } return false;
蛋疼地遍历集合匹配元素,一句话,doStuff().contains(“foo”)
第八个
boolean flag = false; for(String item : someList) { if(item.xxx()) { flag = true; break; } } // continue do stuff with flag
老实说这不是初学者的专利,是习惯了过程式思维的人可能写出来的代码,明显可以抽取出一个方法。知道内联方法吗???
第九个
try { doStuff(); } catch (Exception e) { logger.error('xxxxxx', e); throw new SomeException(e); } // in the top layer try { doWork(); } catch (Exception e) { logger.error(e); }
然后你就会看到两个一模一样的错误堆栈,是谁教的打日志后再抛异常的?也不看看顶层代码。
第十个
void someMethod() { anotherMethod('foo.*'); } void anotherMethod(String pattern) { Pattern p = Pattern.compile(pattern); doWorkWithPattern(); }
静态正则表达式需要提取出来,每次compile的代价很大。
以上就是突然奇想得到的10个吐槽,之后还有,敬请期待。