最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java9中接口的私有方法詳解

 更新時間:2023年04月12日 15:06:10   作者:老王隨聊  
印象中Java?接口就沒有論述私有方法這回事。既然?Java?9?添加了這項特性,那么,應該就有它的用途,我們一起來看看?Java?9?中的接口的私有方法是什么樣的吧

Java 8 之前版本

Java 8 之前 ,接口好像就只允許兩種類型的數據,一個是常量、另一個就是公開 ( public ) 的虛方法 ( abstract ),而且是虛方法哦,就是沒有任何實現的方法,因為這些方法要被類來實現。也就是說,Java 8 之前的版本不存在有著默認實現的方法。

我們來看看一個示例,

public class InterfacePrivateMethodTester {

   public static void main(String []args) {
      LogOracle log = new LogOracle();
      log.logInfo("");
      log.logWarn("");
      log.logError("");
      log.logFatal("");
      LogMySql log1 = new LogMySql();
      log1.logInfo("");
      log1.logWarn("");
      log1.logError("");
      log1.logFatal("");
   }
}


final class LogOracle implements Logging {

   @Override
   public void logInfo(String message) {
      getConnection();
      System.out.println("Log Message : " + "INFO");
      closeConnection();
   }
   @Override
   public void logWarn(String message) {
      getConnection();
      System.out.println("Log Message : " + "WARN");
      closeConnection();
   }
   @Override
   public void logError(String message) {
      getConnection();
      System.out.println("Log Message : " + "ERROR");
      closeConnection();
   }
   @Override
   public void logFatal(String message) {
      getConnection();
      System.out.println("Log Message : " + "FATAL");
      closeConnection();
   }
   @Override
   public void getConnection() {
      System.out.println("Open Database connection");
   }
   @Override
   public void closeConnection() {
      System.out.println("Close Database connection");
   }
}


final class LogMySql implements Logging {

   @Override
   public void logInfo(String message) {
      getConnection();
      System.out.println("Log Message : " + "INFO");
      closeConnection();
   }
   @Override
   public void logWarn(String message) {
      getConnection();
      System.out.println("Log Message : " + "WARN");
      closeConnection();
   }
   @Override
   public void logError(String message) {
      getConnection();
      System.out.println("Log Message : " + "ERROR");
      closeConnection();
   }
   @Override
   public void logFatal(String message) {
      getConnection();
      System.out.println("Log Message : " + "FATAL");
      closeConnection();
   }
   @Override
   public void getConnection() {
      System.out.println("Open Database connection");
   }
   @Override
   public void closeConnection() {
      System.out.println("Close Database connection");
   }
}


interface Logging {
   String ORACLE = "Oracle_Database";
   String MYSQL = "MySql_Database";

   void logInfo(String message);
   void logWarn(String message);
   void logError(String message);
   void logFatal(String message);

   void getConnection();
   void closeConnection();
}

運行結果如下

$ javac InterfacePrivateMethodTester.java && java InterfacePrivateMethodTester
Open Database connection
Log Message : INFO
Close Database connection
Open Database connection
Log Message : WARN
Close Database connection
Open Database connection
Log Message : ERROR
Close Database connection
Open Database connection
Log Message : FATAL
Close Database connection
Open Database connection
Log Message : INFO
Close Database connection
Open Database connection
Log Message : WARN
Close Database connection
Open Database connection
Log Message : ERROR
Close Database connection
Open Database connection
Log Message : FATAL
Close Database connection

在這個實例中,每種類型的日志都有自己的實現

最坑的是什么,每個方法都要實現一遍。是的,每個方法都要實現

JDK 8版本

而 Java 8 也終于作出了一些改變,Java 8 中的接口,可以具有以下類型的變量和方法

1、 常量

2、 虛方法

3、 默認方法

4、 靜態(tài)方法

我們將上面的范例改改,使用 Java 8 的特性

public class InterfacePrivateMethodTester {
   public static void main(String []args) {
      LogOracle log = new LogOracle();
      log.logInfo("");
      log.logWarn("");
      log.logError("");
      log.logFatal("");

      LogMySql log1 = new LogMySql();
      log1.logInfo("");
      log1.logWarn("");
      log1.logError("");
      log1.logFatal("");
   }
}

final class LogOracle implements Logging {}

final class LogMySql implements Logging {}


interface Logging {
   String ORACLE = "Oracle_Database";
   String MYSQL = "MySql_Database";

   default void logInfo(String message) {
      getConnection();
      System.out.println("Log Message : " + "INFO");
      closeConnection();
   }
   default void logWarn(String message) {
      getConnection();
      System.out.println("Log Message : " + "WARN");
      closeConnection();
   }
   default void logError(String message) {
      getConnection();
      System.out.println("Log Message : " + "ERROR");
      closeConnection();
   }
   default void logFatal(String message) {
      getConnection();
      System.out.println("Log Message : " + "FATAL");
      closeConnection();
   }
   static void getConnection() {
      System.out.println("Open Database connection");
   }
   static void closeConnection() {
      System.out.println("Close Database connection");
   }
}

運行結果如下

$ javac InterfacePrivateMethodTester.java && java InterfacePrivateMethodTester
Open Database connection
Log Message : INFO
Close Database connection
Open Database connection
Log Message : WARN
Close Database connection
Open Database connection
Log Message : ERROR
Close Database connection
Open Database connection
Log Message : FATAL
Close Database connection
Open Database connection
Log Message : INFO
Close Database connection
Open Database connection
Log Message : WARN
Close Database connection
Open Database connection
Log Message : ERROR
Close Database connection
Open Database connection
Log Message : FATAL
Close Database connection

因為 Java 8 的接口中的方法可以有默認實現,也就是使用 default 關鍵字修飾的方法

所以,類實現某個接口就比較簡單了,可以有選擇性的實現部分方法。

但是,仍然很坑,就是每個默認方法中的代碼,都必須完整的,而且不能調用其它的默認實現方法

Java 9版本

終于忍無可忍了,Java 9 中可以為接口提供私有的方法,包括私有成員方法和私有靜態(tài)方法

所以 Java 9 中的接口,可以具有以下類型的變量和方法

1、 常量

2、 虛方法

3、 默認方法

4、 靜態(tài)方法

5、 私有靜態(tài)方法

6、 私有方法

于是,我們可以繼續(xù)修改剛剛的實例,改的更簡單明白些

InterfacePrivateMethodTester.java

public class InterfacePrivateMethodTester {
   public static void main(String []args) {
      LogOracle log = new LogOracle();
      log.logInfo("");
      log.logWarn("");
      log.logError("");
      log.logFatal("");

      LogMySql log1 = new LogMySql();
      log1.logInfo("");
      log1.logWarn("");
      log1.logError("");
      log1.logFatal("");
   }
}

final class LogOracle implements Logging {}

final class LogMySql implements Logging {}
interface Logging {
   String ORACLE = "Oracle_Database";
   String MYSQL = "MySql_Database";

   private void log(String message, String prefix) {
      getConnection();
      System.out.println("Log Message : " + prefix);
      closeConnection();
   }
   default void logInfo(String message) {
      log(message, "INFO");
   }
   default void logWarn(String message) {
      log(message, "WARN");
   }
   default void logError(String message) {
      log(message, "ERROR");
   }
   default void logFatal(String message) {
      log(message, "FATAL");
   }
   private static void getConnection() {
      System.out.println("Open Database connection");
   }
   private static void closeConnection() {
      System.out.println("Close Database connection");
   }
}

運行結果如下

$ javac InterfacePrivateMethodTester.java && java InterfacePrivateMethodTester
Open Database connection
Log Message : INFO
Close Database connection
Open Database connection
Log Message : WARN
Close Database connection
Open Database connection
Log Message : ERROR
Close Database connection
Open Database connection
Log Message : FATAL
Close Database connection
Open Database connection
Log Message : INFO
Close Database connection
Open Database connection
Log Message : WARN
Close Database connection
Open Database connection
Log Message : ERROR
Close Database connection
Open Database connection
Log Message : FATAL
Close Database connection

不容易啊,Java 竟然用了 2 個大的版本才達到了其它語言輕輕松松從創(chuàng)世開始就有的機制。

到此這篇關于Java9中接口的私有方法詳解的文章就介紹到這了,更多相關Java9接口私有方法內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java中的SPI機制使用解析

    Java中的SPI機制使用解析

    這篇文章主要介紹了Java中的SPI機制使用解析,SPI意思是"服務提供者的接口",專門提供給服務提供者或者擴展框架功能的開發(fā)者去使用的接口,SPI 將服務接口和服務實現分離開來,將服務調用方和服務實現方進行解耦,需要的朋友可以參考下
    2023-10-10
  • MybatisX自定義模板方式

    MybatisX自定義模板方式

    本文介紹了如何使用MybatisX插件自定義VO對象模板,并提供了一個簡單的示例,首先,文章展示了如何使用FreeMarker語法編寫模板內容,接著,詳細說明了如何配置模板,并通過實際測試驗證了模板的正確性,最后,作者鼓勵大家參考并支持腳本之家
    2025-01-01
  • mybatis generator 配置 反向生成Entity簡單增刪改查(推薦)

    mybatis generator 配置 反向生成Entity簡單增刪改查(推薦)

    這篇文章主要介紹了mybatis generator 配置 反向生成Entity簡單增刪改查(推薦)的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-12-12
  • Springboot項目Maven依賴沖突的問題解決

    Springboot項目Maven依賴沖突的問題解決

    使用Spring Boot和Maven進行項目開發(fā)時,依賴沖突是一個常見的問題,本文就來介紹一下Springboot項目Maven依賴沖突的問題解決,具有一定的參考價值,感興趣的可以了解一下
    2024-07-07
  • maven?傳遞依賴的實現

    maven?傳遞依賴的實現

    本文主要介紹了Maven中傳遞依賴的處理方式,如scope=compile影響依賴傳遞,使用排除不需要的依賴,以及如何通過查看依賴樹解決運行時錯誤,特別是在依賴排除后可能導致的運行時缺少必需包的問題,感興趣的可以了解一下
    2024-10-10
  • mapper.xml無法解析字段的問題

    mapper.xml無法解析字段的問題

    這篇文章主要介紹了mapper.xml無法解析字段的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • JAVA基于Redis實現計數器限流的使用示例

    JAVA基于Redis實現計數器限流的使用示例

    計數器法是限流算法里最簡單也是最容易實現的一種算法,本文主要介紹了JAVA基于Redis實現計數器限流的使用示例,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • Java中四種9*9乘法表的實現方式(附代碼)

    Java中四種9*9乘法表的實現方式(附代碼)

    這篇文章主要介紹了Java中四種9*9乘法表的實現方式(附代碼),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • Nacos多環(huán)境的實現過程

    Nacos多環(huán)境的實現過程

    本文介紹Nacos實現多環(huán)境的方案,包括單租戶和多租戶兩種類型,詳細介紹了如何在Nacos中創(chuàng)建命名空間、配置文件和項目,并通過配置文件的DataId和Group區(qū)分不同環(huán)境和項目,作者通過實戰(zhàn)場景展示了如何配置和啟動項目,驗證了配置文件的讀取和隔離效果
    2024-12-12
  • 詳解Java并發(fā)工具類之CountDownLatch和CyclicBarrier

    詳解Java并發(fā)工具類之CountDownLatch和CyclicBarrier

    在JDK的并發(fā)包中,有幾個非常有用的并發(fā)工具類,它們分別是:CountDownLatch、CyclicBarrier、Semaphore和Exchanger,本文主要來講講其中CountDownLatch和CyclicBarrier的使用,感興趣的可以了解一下
    2023-06-06

最新評論

广丰县| 梅河口市| 本溪| 探索| 东乡县| 汝南县| 隆昌县| 清远市| 阆中市| 平顶山市| 靖安县| 鄄城县| 东辽县| 长宁区| 灵丘县| 定兴县| 克什克腾旗| 湄潭县| 荣昌县| 青川县| 邳州市| 连南| 广河县| 姚安县| 凤山县| 治县。| 岳西县| 仙桃市| 阿勒泰市| 远安县| 桓仁| 嘉鱼县| 桃园市| 德昌县| 梨树县| 淅川县| 泸定县| 航空| 丰台区| 正阳县| 东安县|