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;
}
}
}
糟糕!是以必定要记得判 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>>>详细阅读
地址:http://www.17bianji.com/lsqh/39068.html
1/2 1