; u3 x$ s+ C" v% o% B/ a D9 P俗话说得好,“能力越大,责任越大”。Java 8 为我们提供了强大的能力,它的新特性是划时代的(Java 8 之后的版本中新特性都不够亮眼),包括 Lambda 表达式和 Stream 流,我们通过它们可以写出简洁又高效的代码。打个不恰当的比喻,Java 8 之前,开发者驾驶的是桑塔纳,Java 8 之后,开发者驾驶的是法拉利。 ! k0 B# j9 Z$ ^# J2 e, p, x t4 ?# E% h6 c" M
; T" f. S8 V' }+ O ] % a8 W2 B6 }8 |- x6 K4 L但如果驾驶技术不好的话,法拉利也能变成桑塔纳,甚至还不如。拿之前那段看起来似乎很 6 的代码来说吧,它并不是一段好的代码——尽管使用了新颖的技术,但难以理解。 - {5 m4 y5 f$ r$ t . _9 [7 {( u7 ?0 O在 Java 8 之前,如果你想编写函数式代码的话,应该会使用 Google 的 Guava 类库,它是一个很棒的开源类库(不陌生吧),可以在一定程度上弥补 Java 原生类库的不足。我在它的 wiki 上看到下面这样一条建议,说得很富有远见: + W) F% Z: B+ @0 x1 y' p* s6 x& k# E4 P6 i! \4 t1 X
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.( m" w G; T# A7 Y& x4 |
应该能看得懂吧?大致的意思就是说,如果过度使用 Guava 的函数式编程的话,会导致代码冗长、混乱、不可读,甚至低效;如果有些开发者为了减少代码的长度,刻意把多行代码“优化”成一行代码时,Guava 甚至会被玩哭。- C# g' y0 w7 G# c; b: B
6 j# [( X6 w. s7 M我只能说,优秀的人真可怕,他不仅知道自己的长处,更了解自己的不足——说的就是你,Guava 的开发者。至于开头提到的那位大牛,他写的代码我就不敢恭维,只能说炫技炫到盲目自信吧。根据我的经验,只有很少一部分的大牛能够保持理智,在追求技术创新的同时意识到炫技的问题。6 B v: h$ z3 v# H0 C- A( h8 h+ g
7 f$ b/ _: G% W$ {
我认为,Guava wiki 上的建议同样适用于 Java 8,好技术要妥善的利用,而不是滥用。众所周知,Java 8 的新特性可以用来减少冗余代码,当我们把一个复杂的匿名内部类变成一个简洁的 Lambda 表达式就是一个很好的例子。/ s: B: ~' G! L7 t
2 Z# p2 k6 e" r/ q4 W, Q
Thread t1 = new Thread(new Runnable() { + _& c. k x* F& j5 J% u( F6 x @Override* Z0 S5 M- V4 h9 s
public void run() {% R6 w% H, F: p. Y! Y7 D: ?
System.out.println("匿名内部类,搞起来"); ( V7 ]- W0 ]) y1 w5 ^ J }8 r$ V4 g1 b" S# y& j: [* V2 L
}); / V. y6 q1 l0 [t1.start(); l" m* l3 U- n- ^; [; ^# I6 ^' ?2 a- V/ m4 L, m r/ X7 B
// 优化后& e$ f$ O5 a6 Y1 }) G' D; B' p
1 W" ?, o: V, z! @+ u" C/ a
Thread t2 = new Thread(() -> {* b2 O, V* [: T1 D, A5 h, y5 j. Y
System.out.println("Lambda 表达式,搞起来"); 3 ?: o6 D; L5 \" g. Q});. r* ^" P; Y( `0 Z4 e( o4 j! W) _
t2.start(); ; G; v+ _( q* Q6 U1% q8 k2 O4 P2 f8 ]- q8 o5 P$ O
27 B3 d2 w; j6 X ~9 M$ |/ C
34 W+ x7 x* \/ E# Q9 o
4 ' J$ Z* q1 A8 |: u# G3 T& I3 A1 p5 0 U! ]6 W% k* K, ]6 ; \2 j: o7 L i1 K' e {- A7 : O6 G9 U ^" z ^! r6 h8 * X4 ~5 q& r( f& s+ _: G/ `% e9 m' H9 6 A$ [0 }: h7 u$ l( A107 M P$ V0 G: T" _, i7 R
11. C* v; Y6 q1 `! k: X
12+ W" X$ Q, ^$ N* b2 T
132 G2 u' N: z; @
14 # V8 W4 Q' ]3 V. E0 K6 V% W你看,优化后的代码量更少,并且一目了然,任谁也不会搞到看不懂的地步。函数式编程出现的目的可不仅仅是为了减少冗余代码,它是为了解放生产力——言外之意就是说,代码复杂点没关系,只要可用可靠。编程的目标不是产生尽可能少的代码,而是产生易于维护的、高性能的系统。 # v& X+ R' o3 g% a0 O" Q! Z0 E" o: ]) a- u' s6 \; j7 i1 Z
举个例子来说,假如我从洛阳出发,去郑州参加一个技术沙龙,我就没必要坐飞机;高铁和驾车才是最优的选择。明白我说的意思吧?别整那些花里胡哨的,实用至上。 ' J- V3 O* d9 r4 Z% {/ X2 g8 P( L————————————————: p% O' ?& l) T4 y
版权声明:本文为CSDN博主「沉默王二」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 ) J* @( z! H; K. S原文链接:https://blog.csdn.net/qing_gee/article/details/104709079* M' [0 |/ z8 [) e: }
. R/ a( o# k. X# K