- e# T+ O, _3 f8 V但如果驾驶技术不好的话,法拉利也能变成桑塔纳,甚至还不如。拿之前那段看起来似乎很 6 的代码来说吧,它并不是一段好的代码——尽管使用了新颖的技术,但难以理解。. D( B, }) R: u: s# b+ i( V6 D
6 p/ z' c: L: B' \! ^3 Z8 ~在 Java 8 之前,如果你想编写函数式代码的话,应该会使用 Google 的 Guava 类库,它是一个很棒的开源类库(不陌生吧),可以在一定程度上弥补 Java 原生类库的不足。我在它的 wiki 上看到下面这样一条建议,说得很富有远见:# R+ N* U5 P4 c& `% |/ }2 ?5 k
+ N' [2 V0 v9 c% W! E
Excessive use of Guava’s functional programming idioms can lead to verbose, confusing, unreadable and inefficient code. … when you go to preposterous lengths to make your code “a one-line”, the Guava team weeps. % r7 v+ N2 s5 g9 n! `应该能看得懂吧?大致的意思就是说,如果过度使用 Guava 的函数式编程的话,会导致代码冗长、混乱、不可读,甚至低效;如果有些开发者为了减少代码的长度,刻意把多行代码“优化”成一行代码时,Guava 甚至会被玩哭。 ( p w# E- _ O5 L 7 y5 f3 d! i- s) x- L$ X1 y我只能说,优秀的人真可怕,他不仅知道自己的长处,更了解自己的不足——说的就是你,Guava 的开发者。至于开头提到的那位大牛,他写的代码我就不敢恭维,只能说炫技炫到盲目自信吧。根据我的经验,只有很少一部分的大牛能够保持理智,在追求技术创新的同时意识到炫技的问题。 ' ~- T4 C \& X# y) {) Z7 t 6 p+ a | e' g- \我认为,Guava wiki 上的建议同样适用于 Java 8,好技术要妥善的利用,而不是滥用。众所周知,Java 8 的新特性可以用来减少冗余代码,当我们把一个复杂的匿名内部类变成一个简洁的 Lambda 表达式就是一个很好的例子。 $ y% ^9 q- i B4 F . U9 Z |: y$ T5 w [Thread t1 = new Thread(new Runnable() {; z2 v' f0 {0 M* D+ |
@Override. Q) s8 y5 R& u& z+ L9 F: ~: R
public void run() {+ j, O9 I2 l7 ]+ K" t1 s$ G2 M
System.out.println("匿名内部类,搞起来"); B0 w. v9 o6 C% i, V } 9 U2 b' ~! x5 n4 u* ?: d});2 \+ F. O& {3 X. w. n/ f
t1.start();: j l" W3 }: q. m' y
* a0 t- ]/ y ]// 优化后 ! c1 p7 l$ i( ^" [# T2 ?% G2 Z" f
Thread t2 = new Thread(() -> { # q0 A* f5 M# E$ H% R System.out.println("Lambda 表达式,搞起来");& L2 s( `% G; U
});4 O$ b- Y1 \5 x7 y& s0 q
t2.start();# s5 Q% P% W, S8 C: V0 i* a9 x; R: v
1 5 F' y+ O6 \+ _; c" o- v# g3 j) {2 , X, M- n# {5 d9 s$ s3+ G3 ]& s$ R" F8 P
4 6 y! Y& U+ S0 O6 u( R' a: a5 7 u4 G" r3 R5 J7 H/ t7 y6- f/ u- d8 ^$ ]2 z, h$ g
7 # w* [8 q1 U) ~3 ^7 x8 0 n1 w% W, F+ R0 i( v) ^/ B99 r! D, A$ Z0 l5 k
109 @; d. |6 }( ^2 Q
11. P0 @% _# V# j2 L: t( c! [
128 e5 _9 W4 i5 h( Y8 R
139 y3 C( ]. X- t4 v
14+ I, f |$ l9 h( Z; x
你看,优化后的代码量更少,并且一目了然,任谁也不会搞到看不懂的地步。函数式编程出现的目的可不仅仅是为了减少冗余代码,它是为了解放生产力——言外之意就是说,代码复杂点没关系,只要可用可靠。编程的目标不是产生尽可能少的代码,而是产生易于维护的、高性能的系统。+ ^' [7 j" d4 Y
2 D- [! A4 h" y! z' d
举个例子来说,假如我从洛阳出发,去郑州参加一个技术沙龙,我就没必要坐飞机;高铁和驾车才是最优的选择。明白我说的意思吧?别整那些花里胡哨的,实用至上。 & d$ ]" j6 G/ O, N' d————————————————# f& o. T) a, B Q" y0 F. n$ w5 \8 l
版权声明:本文为CSDN博主「沉默王二」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。2 T( M% F5 ^7 h- U' m9 p" g: N
原文链接:https://blog.csdn.net/qing_gee/article/details/104709079$ L- T; B) l, \. a- ~) O1 N
7 \7 M( [/ G. o, K3 U4 v