差異處

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

連向這個比對檢視

Both sides previous revision 前次修改
下次修改
前次修改
java:java8:functionalinterface:method_reference [2017/02/24 14:31]
tony [How to resolve?]
java:java8:functionalinterface:method_reference [2023/06/25 09:48] (目前版本)
行 46: 行 46:
 問題是: 如果我有10個bus相關操作,不就要寫很多一樣的code嗎? ​ 問題是: 如果我有10個bus相關操作,不就要寫很多一樣的code嗎? ​
 ===== How to resolve? ===== ===== How to resolve? =====
-一開始我就想,除了aop、intercepter等方式外,function pointer應該就能解決我的問題:​ 只要有一個method會在critical action前後做lock與release就可以了。最後使用了Java8的FunctionalInterface,宣告以下介面:+一開始我就想,除了aop、intercepter等方式外,function pointer應該就能解決我的問題:​ 只要有一個method會在critical action前後做lock與release就可以了。類似以下:​ 
 +<code java> 
 +void busAction(Function* criticalAction){ 
 + lockAndWait();​ 
 + 
 + criticalAction->​invoke();​ 
 + 
 + release();​ 
 +
 +</​code>​ 
 +最後宣告一個名為BusAction的FunctionalInterface:
 <code java> <code java>
 @FunctionalInterface @FunctionalInterface
-private ​interface BusAction {+public ​interface BusAction {
  boolean invoke();  boolean invoke();
 } }
行 84: 行 94:
 </​code>​ </​code>​
 透過以上方法,可以讓我大幅減少duplicated code。 透過以上方法,可以讓我大幅減少duplicated code。
 +===== 後記 =====
 +如果不想額外增加Interface,也可以直接使用Runable或Callable,取決於你是否要讓語義更清楚而已。
 ===== Reference ===== ===== Reference =====
   * [[https://​docs.oracle.com/​javase/​tutorial/​java/​javaOO/​methodreferences.html|Oracle Java - Method Reference]]   * [[https://​docs.oracle.com/​javase/​tutorial/​java/​javaOO/​methodreferences.html|Oracle Java - Method Reference]]
   * [[http://​stackoverflow.com/​questions/​34888904/​function-pointers-as-parameters-in-java-8|function-pointers-as-parameters-in-java-8]]   * [[http://​stackoverflow.com/​questions/​34888904/​function-pointers-as-parameters-in-java-8|function-pointers-as-parameters-in-java-8]]
 +  * [[http://​blog.dontcareabout.us/​2013/​03/​functional-interfacejava-8.html|functional interface:Java 8 重新製作的概念]]