2 F6 l# R+ g6 @- u. L在 Java 8 之前,如果你想编写函数式代码的话,应该会使用 Google 的 Guava 类库,它是一个很棒的开源类库(不陌生吧),可以在一定程度上弥补 Java 原生类库的不足。我在它的 wiki 上看到下面这样一条建议,说得很富有远见: / M# B" R, ^. \7 ^" I" p. c* w0 f$ `! v+ h' I. |( n
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.. x# p% A- Z+ G2 t
应该能看得懂吧?大致的意思就是说,如果过度使用 Guava 的函数式编程的话,会导致代码冗长、混乱、不可读,甚至低效;如果有些开发者为了减少代码的长度,刻意把多行代码“优化”成一行代码时,Guava 甚至会被玩哭。3 N. f' c3 i' o+ b" r! t0 \ i U) Y9 |
- _# M5 p/ Y5 _% G! E+ N我只能说,优秀的人真可怕,他不仅知道自己的长处,更了解自己的不足——说的就是你,Guava 的开发者。至于开头提到的那位大牛,他写的代码我就不敢恭维,只能说炫技炫到盲目自信吧。根据我的经验,只有很少一部分的大牛能够保持理智,在追求技术创新的同时意识到炫技的问题。 & s& P% c6 H! W3 ~0 u4 B / O Z' ~7 M5 ?0 J& I/ z' B我认为,Guava wiki 上的建议同样适用于 Java 8,好技术要妥善的利用,而不是滥用。众所周知,Java 8 的新特性可以用来减少冗余代码,当我们把一个复杂的匿名内部类变成一个简洁的 Lambda 表达式就是一个很好的例子。& r5 s6 K; o8 `1 ~$ Y, x
* `+ Y% L7 a% @* v" U' }6 ~( Q1 i& uThread t1 = new Thread(new Runnable() {$ ]' U- R. ]0 J8 w8 k2 N4 R
@Override8 W9 l: ]! m9 y* F
public void run() { 4 }3 c3 J* P' K6 q System.out.println("匿名内部类,搞起来");0 F8 s6 U/ t# Q1 N) `" e; g% y
}' @& L8 }# i; }3 b& O2 N3 {: t
}); ' N; s. [( s; l& T9 ]t1.start(); 7 O' j5 x! E: U* H9 {0 u) O! W2 J! N) }+ T) l5 W8 W
// 优化后 0 A, K7 T4 j2 g6 K, T3 S) }7 n' T1 q S. o: y
Thread t2 = new Thread(() -> {) R% J6 x& J8 {" ]! J8 n7 s! K
System.out.println("Lambda 表达式,搞起来"); ) L: _* F3 z! l4 K( t& @% |});8 G q/ Z. H+ K9 k5 X* `4 Y, U
t2.start();0 i: u. y# P! |6 p9 P# Q
1 1 ^* V Y' w/ }9 W7 b2, i# L6 S" j, t( q8 T5 N) D& A3 |5 ^
36 h- L; ~' y" i1 b( R1 g
4: G$ B) O9 ]% k& i9 Z3 x' |
5 ( f7 G! _! s4 q. A6 - R- r# j: ?! c W1 J7 3 I5 n* {: ]+ u0 e1 r. t8 0 g2 Q2 e1 z+ k4 a% g2 i$ Z4 X9 9 r4 i; ]( W4 J& ]; [6 X! f' t% s- P10+ d! o% U) I# R4 F( i T
11 7 v) s+ `# v* \& k G12 - c+ R+ [% x% g& p; W* v4 y13, h' [9 K2 q6 R
14( g- K* } J2 A$ h# B: H4 z8 G
你看,优化后的代码量更少,并且一目了然,任谁也不会搞到看不懂的地步。函数式编程出现的目的可不仅仅是为了减少冗余代码,它是为了解放生产力——言外之意就是说,代码复杂点没关系,只要可用可靠。编程的目标不是产生尽可能少的代码,而是产生易于维护的、高性能的系统。 # C$ T( C1 o" z : O' g) @) `0 |举个例子来说,假如我从洛阳出发,去郑州参加一个技术沙龙,我就没必要坐飞机;高铁和驾车才是最优的选择。明白我说的意思吧?别整那些花里胡哨的,实用至上。 ; e) U+ k, @" s9 L————————————————& w* e- U& B8 ~+ I9 T
版权声明:本文为CSDN博主「沉默王二」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 8 O O$ l8 R2 [! z原文链接:https://blog.csdn.net/qing_gee/article/details/104709079$ X5 g _2 Q% e+ }/ [
4 W) f- g: z5 r6 y; m
' k* C: J# \0 y7 K0 p; k8 q