日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

Java 8:声明接口中的私有方法和受保护的方法

發(fā)布時(shí)間:2023/12/3 java 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 8:声明接口中的私有方法和受保护的方法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

引入Java 8時(shí),我們可以在接口中使用默認(rèn)方法。 此功能的主要驅(qū)動(dòng)程序是允許擴(kuò)展接口,同時(shí)保留對(duì)舊接口版本的向后兼容性。 一個(gè)示例是在現(xiàn)有Collection類中引入stream()方法。

有時(shí),當(dāng)我們想引入幾種默認(rèn)方法時(shí),它們可能共享一些通用的代碼庫(kù),因此,如果我們可以在接口中使用私有方法,那就太好了。 這樣,我們可以重用我們的代碼,還可以防止代碼暴露給正在使用或正在實(shí)現(xiàn)接口的類。

但有一個(gè)問題。 接口中的私有和受保護(hù)的訪問已推遲到Java9。那么,今天如何在Java 8中使用私有接口方法?

一個(gè)簡(jiǎn)單的解決方案

假設(shè)我們有兩個(gè)方法Foo 。 bar()和bazz()都將返回一些難以計(jì)算的結(jié)果,這些結(jié)果是從這樣的共享代碼發(fā)出的:

public interface Foo {default int bar() {return complicatedMethodWithManyLinesOfCode();}default int bazz() {return complicatedMethodWithManyLinesOfCode() + 1;}// Will not work in Java 8 because interface methods cannot be private!private int complicatedMethodWithManyLinesOfCode() {// Actual code not shown...return 0;}}

通過(guò)引入一個(gè)包含私有方法的class ,我們可以從外部訪問中“隱藏”該方法,并且?guī)缀蹩梢詳[脫Java 8接口中的私有方法。 可以這樣完成:

public interface Foo {default int bar() {return Hidden.complicatedMethodWithManyLinesOfCode();}default int bazz() {return Hidden.complicatedMethodWithManyLinesOfCode() + 1;}class Hidden {private static int complicatedMethodWithManyLinesOfCode() {// Actual code not shown...return 0;}}}

從外部類或接口看不到方法Foo:complicatedMethodWithManyLinesOfCode但是可以看到Hidden類本身。 但是,如果它們是私有的,則看不到“ Hidden方法和字段。

此方案也可以應(yīng)用于受保護(hù)的接口方法訪問。 從技術(shù)上講,我們可以在一個(gè)接口中擴(kuò)展Hidden類,該接口還可以擴(kuò)展原始接口Foo 。 請(qǐng)記住,受保護(hù)的方法也是包可見的,因此,如果我們擴(kuò)展或使用同一包中的接口,則受保護(hù)的方法也是可見的(與以往一樣)。

一個(gè)缺點(diǎn)是隱藏方法無(wú)法訪問接口中的其他方法。 通過(guò)使隱藏的靜態(tài)方法采用接口類型的參數(shù),可以輕松地解決后一個(gè)缺點(diǎn)。 假設(shè)complicatedMethodWithManyLinesOfCode方法需要從Foo接口獲取另一個(gè)值,該值可以通過(guò)名為buzz()某些接口方法獲得,則它看起來(lái)可能像這樣:

public interface Foo {default int bar() {return Hidden.complicatedMethodWithManyLinesOfCode(this);}default int bazz() {return Hidden.complicatedMethodWithManyLinesOfCode(this) + 1;}int buzz();class Hidden {private static int complicatedMethodWithManyLinesOfCode(Foo foo) {// Actual code not shown...return 0 + foo.buzz();}}}

翻譯自: https://www.javacodegeeks.com/2016/03/java-8-declare-private-protected-methods-interfaces.html

總結(jié)

以上是生活随笔為你收集整理的Java 8:声明接口中的私有方法和受保护的方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。