作家
登录

这10条不得不提的Java编程技巧让你受益终生!

作者: 来源: 2017-11-21 10:53:18 阅读 我要评论

Tech Neo技巧沙龙 | 11月25号,九州云/ZStack与您一路商量云时代收集界线治理实践


好的习惯是成功的一半。因为,你知道,“任何可能掉足的工作,最后都邑掉足。”这就是人们为什么爱好进行“防错性法度榜样设计”的原因。下面我列出的的小我感到最有效而又偏执的 10 项 Java 编程技能。请看:

1. 把字符串常量放在前面(技巧文)

经由过程把字符串常量放在比较函数equals()比较项的左侧来防止有时的 NullPointerException 大年夜来都不是一个坏主意,就像如许:

switch (value) {

// Good

2. 不要信赖早期的JDK APIs

case 1: int j = 1; break;

Java刚出现的时刻,编程必定是件很苦楚的事。那时的API仍然不敷成熟,你可能曾经碰到过如许一段代码:

String[] files = file.list();

// Watch out

if (files != null) {

...

}

}

看起来很奇怪对吗?也许吧,然则看看这个Javadoc:

“如不雅抽象路径名表示的不是一个目次,那么这个办法返回null。不然返回一个字符串数组,个中每个字符串表示当前目次下的一个文件或目次。”

是的,最好再加上判空检查,以确保精确:

if (file.isDirectory()) {

String[] files = file.list();

for (int i = 0; i < files.length; i++) {

...

final int j = 1;

}

法度榜样员看过来!这10条不得不提的java编程技能让你受益毕生!

}

}

糟糕!是以必定要记得判 null检查!

3. 不要信赖“-1”(技巧文)

我知道这很偏执,Javadoc中关于 String.indexOf() 的早期描述是如许的…

“字符在字符序列中第一次出现的地位将作为结不雅[被返回],如不雅字符不存在则返回-1。”

所以,-1 就可以理所当然被拿来竽暌姑,对吗?我说纰谬,看看这个:

// Bad

if (string.indexOf(character) != -1) { ... }

// Good

if (string.indexOf(character) >= 0) { ... }

谁知道呢。也许在某个特定场合下他们将会须要另一种 编码值,如不雅不区分大年夜小写的话,otherString 就会被包含进去…此时或许可以返回 -2呢?谁知道呢。

case 1: {

毕竟,我们有异常多关于NULL——价值亿万美金的缺点 (https://blog.jooq.org/2015/07/22/null-is-not-the-billion-dollar-mistake-a-counter-rant/)的评论辩论。为什么不开端评论辩论 -1呢,某种意义上来说 -1 是 null 在int类型下的另一种情势。

4. 避免不测的赋值(技巧文)

是的。即使最优良的法度榜样员也可能犯这种缺点(当然,不包含我。看#7)。

if (files != null) {

(假设这是JavaScript,我们暂且偏执地认为是这种说话)

// Ooops

if (variable = 5) { ... }

// Better (because causes an error)

if (5 = variable) { ... }

// Intent (remember. Paranoid JavaScript: ===)

if (5 === variable) { ... }

这是毫无疑问的,把一种表达式转换成另一种更好的表达式,并不会掉去什么。只要我们的Options是真实存在的(Java 8中 Optional是对可认为空的对象进行的封装),不是吗?评论辩论一下…

再说一遍。如不雅你的表达式中有常量,将它放在等式左边。如许当你计算再添加一个 = 时,不轻易掉足。

5. 检查null和长度

不管什么时刻你有一个集合、数组或者其他的,确保它存在并且不为空。

// Bad

if (array.length > 0) { ... }

// Good

if (array != null && array.length > 0) { ... }

你不知道这些数组来自哪儿,也许是早期的JDK API呢?

6. 所有的办法都用 final 声明(技巧文)

你可以告诉我任何你想要的开闭原则,不过那都是胡说八道。我不信赖你(可以精确持续我的类),也不信赖我本身(不会心外埠持续我的类)。是以除了接口(专门用于持续)都应当是严格的 final。可以查看我们的 Java 编码中 10 个奥妙的最佳实践 中的#9。

// Bad

public void boom() { ... }

if (variable.equals("literal")) { ... }

// Good. Don't touch.

public final void dontTouch() { ... }

是的,写成final。如不雅如许做对你来说没有意义,你也可以经由过程修改或重写字节率攀来改变类和办法,或者发送功能请求。我敢肯定重写类/办法并不是一个好主意。

7. 重载的时刻不要信赖泛型(技巧文)

思虑一下这个:

// Bad

<T> void bad(T value) {

bad(Collections.singletonList(value));

}

<T> void bad(List<T> values) {

...

}

// Good

if ("literal".equals(variable)) { ... }

final <T> void good(final T value) {

if (value instanceof List)

good((List<?>) value);

else

good(Collections.singletonList(value));

}

final <T> void good(final List<T> values) {


  推荐阅读

  Github一周热门项目总结:自然语言处理Python库spaCy最热!

【编辑推荐】 你想找的Python材料这里全都有!没有你找不到!史上最全材料合集 Python开辟中若何应用Hook技能 Python中的优化,大年夜神的法度榜样比我们写的快五倍,本来是如许做的! Python转JavaScri>>>详细阅读


本文标题:这10条不得不提的Java编程技巧让你受益终生!

地址:http://www.17bianji.com/lsqh/39068.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)