差異處

這裏顯示兩個版本的差異處。

連向這個比對檢視

下次修改
前次修改
java:effective_java:lambdas_and_streams:favor_the_use_of_standard_functional_interfaces [2019/07/21 23:09]
tony 建立
java:effective_java:lambdas_and_streams:favor_the_use_of_standard_functional_interfaces [2023/06/25 09:48] (目前版本)
行 1: 行 1:
 {{tag>​java effective_java}} {{tag>​java effective_java}}
 ====== Effective Java - Favor the use of standard functional interfaces ====== ====== Effective Java - Favor the use of standard functional interfaces ======
-===== Introduction ​& My Opinion ​===== +===== Introduction ===== 
-這個item的主要目的是希望大家能夠盡量使用JDK本身所提供的functional interfaces而減少自創武功。書中的例子是使用LinkedHashMap的protected method removeEldestEntry,這是一個template method;在Java 8以前可以透過override這個method來達到保留最新的100個entries:​+這個item的主要目的是希望大家能夠盡量使用JDK本身所提供的functional interfaces而減少自創武功。減少自創武功的原因主要有以下幾點:​ 
 +  - 這會讓你設計的API容易被學習,如果用的人熟悉JDK內建的API,可以避免他們需要額外去了解你定義的概念。 
 +  - 這將讓你的API較容易維護。因為東西越多,通常會越複雜,測試也會跟著增加。 
 +書中的例子是使用LinkedHashMap的protected method removeEldestEntry,這是一個template method;在Java 8以前可以透過override這個method來達到保留最新的100個entries:​
 <code java> <code java>
 protected boolean removeEldestEntry(Map.Entry<​K,​V>​ eldest) { protected boolean removeEldestEntry(Map.Entry<​K,​V>​ eldest) {
行 22: 行 25:
   - 基於新的functional interface可能會被廣泛使用、名稱是很重要的概念或是會使用到default method,那就可以選擇自創武功。書中是以Comparator為例。   - 基於新的functional interface可能會被廣泛使用、名稱是很重要的概念或是會使用到default method,那就可以選擇自創武功。書中是以Comparator為例。
   - 自創武功時,要記得宣告@FunctionalInterface。這可以明確告訴開發人員它的用途,也可以避免被加上不屬於這個用途的method。   - 自創武功時,要記得宣告@FunctionalInterface。這可以明確告訴開發人員它的用途,也可以避免被加上不屬於這個用途的method。
 +  - 盡量避免在overloading method同一個位置的參數使用不同的functional interface,這容易造成client ambiguity問題。
 ===== Note ===== ===== Note =====
 Effective Java第三版Item 44。 Effective Java第三版Item 44。
 ===== Reference ===== ===== Reference =====
   * Effective Java, 3/e   * Effective Java, 3/e
 +  * [[https://​www.twblogs.net/​a/​5ce69c22bd9eee6726cb10c6|中譯]]
 =====    ===== =====    =====
 ---- ----
 \\ \\
 ~~DISQUS~~ ~~DISQUS~~