) R0 M& j1 f3 o* t在 Java 8 之前,如果你想编写函数式代码的话,应该会使用 Google 的 Guava 类库,它是一个很棒的开源类库(不陌生吧),可以在一定程度上弥补 Java 原生类库的不足。我在它的 wiki 上看到下面这样一条建议,说得很富有远见: 6 m; [9 _; R! |9 d# n6 P7 _8 n 4 b, m4 r' o% AExcessive 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. * \3 b( R- [" G应该能看得懂吧?大致的意思就是说,如果过度使用 Guava 的函数式编程的话,会导致代码冗长、混乱、不可读,甚至低效;如果有些开发者为了减少代码的长度,刻意把多行代码“优化”成一行代码时,Guava 甚至会被玩哭。5 X+ ]+ [- G; i z# Q3 |+ A8 P( D9 M& `
' O0 z! w2 n) K! U+ @2 Z# g我只能说,优秀的人真可怕,他不仅知道自己的长处,更了解自己的不足——说的就是你,Guava 的开发者。至于开头提到的那位大牛,他写的代码我就不敢恭维,只能说炫技炫到盲目自信吧。根据我的经验,只有很少一部分的大牛能够保持理智,在追求技术创新的同时意识到炫技的问题。8 R( Z% k4 _$ G; a4 j( y+ S
8 D9 k5 W# a, d5 s/ n
我认为,Guava wiki 上的建议同样适用于 Java 8,好技术要妥善的利用,而不是滥用。众所周知,Java 8 的新特性可以用来减少冗余代码,当我们把一个复杂的匿名内部类变成一个简洁的 Lambda 表达式就是一个很好的例子。( S$ e( U& K% V! i% d/ O' T
) {8 |/ a! S" j9 U- v0 l) fThread t1 = new Thread(new Runnable() {# @) y9 Q- p* p) z2 w: h% B4 `
@Override ; n9 K# R6 H4 ~$ e1 f$ ? public void run() { + B7 t' k E3 i6 G, v6 f% c System.out.println("匿名内部类,搞起来"); 7 c" a$ d( H; H# b. p$ Q4 _ }4 y9 Q( m7 q/ F$ a: w
});9 u0 ~- C$ S5 M, P
t1.start(); I) {3 ]8 \8 D4 K; E! s2 i% o% b
// 优化后" l7 d' k- M8 Y5 u" j5 j' d* P