<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # Java 8 – 函數式接口 > 原文: [https://howtodoinjava.com/java8/functional-interface-tutorial/](https://howtodoinjava.com/java8/functional-interface-tutorial/) 了解 Java 8 函數式接口以及圍繞一個接口允許的一種抽象方法的規則。 了解如何通過函數式接口中的默認方法添加更多方法。 ```java Table of Contents 1\. What is functional interface 2\. Do's and Don't's in functional interfaces ``` ## 1\. 什么是函數式接口 函數式接口是 [**java 8**](//howtodoinjava.com/category/java8/ "java 8") 中的新增特性,其中**恰好允許其中的一種抽象方法**。 這些接口也稱為**單一抽象方法接口(SAM 接口)**。 在 Java 8 中,函數式接口也可以使用 lambda 表達式,方法引用和構造器引用表示。 Java 8 也引入了一個注解,即`@FunctionalInterface`,當您注解的接口違反了一種抽象方法的約定時,該注解也可用于編譯器級錯誤。 讓我們構建第一個函數式接口: ```java @FunctionalInterface public interface MyFirstFunctionalInterface { public void firstWork(); } ``` 讓我們嘗試添加另一個抽象方法: ```java @FunctionalInterface public interface MyFirstFunctionalInterface { public void firstWork(); public void doSomeMoreWork(); //error } ``` 以上將導致編譯器錯誤,如下所示: ```java Unexpected @FunctionalInterface annotation @FunctionalInterface ^ MyFirstFunctionalInterface is not a functional interface multiple non-overriding abstract methods found in interface MyFirstFunctionalInterface ``` ![Functional-Interface-Error](https://img.kancloud.cn/1c/d6/1cd689223c7ef1aba61515a8714f7899_673x243.png) > 閱讀更多:[通用函數式接口](https://howtodoinjava.com/java8/generic-functional-interfaces/) ## 2\. 函數式接口中的“是”與“否” 以下是函數式接口中允許和不允許的事物的列表。 * 如上所述, ***在任何函數式接口中僅允許使用一種抽象方法*** 。 在函數式接口中不允許使用第二種抽象方法。 如果刪除`@FunctionInterface`注解,則可以添加另一個抽象方法,但是它將使該接口成為非函數式接口。 * 即使`@FunctionalInterface`注釋將被省略 ,函數式接口也有效。 它僅用于通知編譯器在接口內部強制使用單個[抽象方法](//howtodoinjava.com/object-oriented/exploring-interfaces-and-abstract-classes-in-java/ "Exploring interfaces and abstract classes in java")。 * 從概念上講,函數式接口僅具有一種抽象方法。 由于[**默認方法**](//howtodoinjava.com/java8/default-methods-in-java-8/)具有實現,因此它們不是抽象的。 由于默認方法不是抽象的,因此您可以自由地向函數式接口添加任意數量的默認方法。 以下是有效的函數式接口: ```java @FunctionalInterface public interface MyFirstFunctionalInterface { public void firstWork(); default void doSomeMoreWork1(){ //Method body } default void doSomeMoreWork2(){ //Method body } } ``` * 如果接口聲明了覆蓋`java.lang.Object`的公共方法之一的抽象方法,則該方法也不計入接口的抽象方法數量,因為該接口的任何實現都有來自`java.lang.Object`或其他地方的實現。 例如[`Comparator`](//howtodoinjava.com/search-sort/when-to-use-comparable-and-comparator-interfaces-in-java/)是函數式接口,即使它聲明了兩個抽象方法。 為什么? 因為這些抽象方法之一`equals()`具有與`Object`類中的`public`方法相同的簽名。 例如下方的接口是有效的函數式接口。 ```java @FunctionalInterface public interface MyFirstFunctionalInterface { public void firstWork(); @Override public String toString(); //Overridden from Object class @Override public boolean equals(Object obj); //Overridden from Object class } ``` 這就是 Java 8 中**函數式接口的全部內容**。 學習愉快!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看