4 k+ [9 J! V5 o1 n8 b ) ]) g- P$ J% O6 {+ A' C Z9 d" d2 w, X- ?1 n
但如果驾驶技术不好的话,法拉利也能变成桑塔纳,甚至还不如。拿之前那段看起来似乎很 6 的代码来说吧,它并不是一段好的代码——尽管使用了新颖的技术,但难以理解。, j, X# D6 Z# l: T( ]2 h' d
& H, g/ A% a: ^( _4 j |) U在 Java 8 之前,如果你想编写函数式代码的话,应该会使用 Google 的 Guava 类库,它是一个很棒的开源类库(不陌生吧),可以在一定程度上弥补 Java 原生类库的不足。我在它的 wiki 上看到下面这样一条建议,说得很富有远见:) E# W& Z& g ~ r' I, [$ b
! r* T0 ^- a/ z$ u+ R+ k7 b
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.9 D# I s) F% B1 E# n g! R
应该能看得懂吧?大致的意思就是说,如果过度使用 Guava 的函数式编程的话,会导致代码冗长、混乱、不可读,甚至低效;如果有些开发者为了减少代码的长度,刻意把多行代码“优化”成一行代码时,Guava 甚至会被玩哭。# {$ F* t0 K% f8 `9 Q
& e. ^# ] \7 a y+ s
我只能说,优秀的人真可怕,他不仅知道自己的长处,更了解自己的不足——说的就是你,Guava 的开发者。至于开头提到的那位大牛,他写的代码我就不敢恭维,只能说炫技炫到盲目自信吧。根据我的经验,只有很少一部分的大牛能够保持理智,在追求技术创新的同时意识到炫技的问题。 : \0 _/ c* l t ; n' Y$ G8 t$ V$ ?) f0 L我认为,Guava wiki 上的建议同样适用于 Java 8,好技术要妥善的利用,而不是滥用。众所周知,Java 8 的新特性可以用来减少冗余代码,当我们把一个复杂的匿名内部类变成一个简洁的 Lambda 表达式就是一个很好的例子。) {5 ^/ T/ q* J
% A( c6 b9 T4 ~& vThread t1 = new Thread(new Runnable() { ( h& ?" }: k% `) H w+ x @Override# |* G( i& l) W8 q" D1 W$ O
public void run() { 3 O1 N& G0 D( V; u System.out.println("匿名内部类,搞起来"); * I/ J' M6 K3 P3 h6 B6 U' f& | }0 j2 |" v4 t E: _
});* P6 B# X& A; t* C8 c
t1.start(); " ^, e8 Y) y5 \# M0 v- ?8 O+ |+ y+ d , H5 O* B. m5 S& O: U- c3 g% v// 优化后 $ X; \5 a' u! F6 }8 ?& q1 l0 \- K3 N, {8 p
Thread t2 = new Thread(() -> { + C: G H, _: R& @) O9 G/ L/ J System.out.println("Lambda 表达式,搞起来"); 2 q7 g' x6 ^ x$ D0 }9 t});+ x% c, l5 a* A) P* ?# J/ D. y
t2.start(); f. ]4 J. e0 {1 + c4 T3 D) n' t# g2 j4 f: _2 ' x8 X: y4 P' A4 q0 N3 . t3 G: W. V4 X( C4; `) T+ s3 o. b5 ^5 N6 ~' t v% X* \% q: t
5 U* u# W6 Y: X
6 ) Q. e8 B P. I# O" _7 $ \& U; T: ]/ i+ C* S! d& O8, B5 b7 L+ D9 H, p9 v, U
9 6 y+ z8 F) n! i10. ~- {3 _7 z Z# @( @
11 5 K: S) \9 h: ?, _, M G123 [# w* [, v- B& y2 r3 D
13 * W% f1 s" T, ~' j: b14 6 {, T" ~" l V' s C' h0 M7 O+ K' Y4 W你看,优化后的代码量更少,并且一目了然,任谁也不会搞到看不懂的地步。函数式编程出现的目的可不仅仅是为了减少冗余代码,它是为了解放生产力——言外之意就是说,代码复杂点没关系,只要可用可靠。编程的目标不是产生尽可能少的代码,而是产生易于维护的、高性能的系统。 + t7 ^/ ^, ~% V, w" ]6 X; H; p0 G' U/ _
举个例子来说,假如我从洛阳出发,去郑州参加一个技术沙龙,我就没必要坐飞机;高铁和驾车才是最优的选择。明白我说的意思吧?别整那些花里胡哨的,实用至上。 0 s9 a7 _- |7 V) @6 W————————————————5 d3 S/ F. I1 @' a% [8 I1 O5 z
版权声明:本文为CSDN博主「沉默王二」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 ' _+ u& N- g1 e }% L E$ L, H原文链接:https://blog.csdn.net/qing_gee/article/details/1047090798 f! ^5 c# S) x C1 u- v
! H& d' K/ ~8 i- Z* e x
, R0 Y" E; j. k$ W/ {- J; v