java中接口私有反方_Java 8:在接口中声明私有和受保护的方法
java中接口私有反方
引入Java 8時,我們可以在接口中使用默認方法。 此功能的主要驅動程序是允許接口擴展,同時保留對舊接口版本的向后兼容性。 一個示例是在現有Collection類中引入stream()方法。
有時候,當我們想引入幾種默認方法時,它們可能共享一些通用的代碼庫,因此,如果我們可以在接口中使用私有方法,那就太好了。 這樣,我們可以重用我們的代碼,還可以防止代碼暴露給正在使用或正在實現接口的類。
但有一個問題。 接口中的私有和受保護訪問被推遲到Java9。那么,今天如何在Java 8中使用私有接口方法呢?
一個簡單的解決方案
假設我們有兩個方法Foo 。 bar()和bazz()都將返回一些難以計算的結果,這些結果是從這樣的共享代碼中發出的:
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;}}通過引入一個包含私有方法的class ,我們可以從外部訪問“隱藏”該方法,并幾乎擺脫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方法和字段。
此方案也可以應用于受保護的接口方法訪問。 從技術上講,我們可以在一個接口中擴展Hidden類,該接口還可以擴展原始接口Foo 。 請記住,受保護的方法在包中也是可見的,因此,如果我們擴展或使用同一包中的接口,則受保護的方法也是可見的(與以往一樣)。
一個缺點是隱藏方法無法訪問接口中的其他方法。 通過使隱藏的靜態方法采用接口類型的參數,可以輕松地解決后一個缺點。 假設complicatedMethodWithManyLinesOfCode方法需要Foo接口中的另一個值,該值可以通過名為buzz()某些接口方法獲得,則它可能看起來像這樣:
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
java中接口私有反方
總結
以上是生活随笔為你收集整理的java中接口私有反方_Java 8:在接口中声明私有和受保护的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑硬盘没有显示内容(电脑硬盘没有显示内
- 下一篇: 暗黑2符文宝石大全(暗黑2符文宝石大全图