2017-02-15 122 views
1
public interface Example<E> 
{ 
    E get(int index); 

    default E get() 
    { 
     return get(0); 
    } 
} 

這將是界面的初始設計。是這樣的一個可接受的使用默認方法(基本上爲默認參數),還是應該只在將來使用它來增加功能?這是一個可接受的Java默認接口方法嗎?

+1

我從Oracle那裏聽到的官方說法是,它主要是爲未來增加的功能而設計的。但是在Java 8中有新的接口包含默認方法,所以看起來他們沒有自己的建議。 :) – yshavit

+4

這對我來說很好,在代碼審查時我不會遇到任何問題。只有評論會命名 - 也許'getFirst'?還需要證明,如果事情是空的,它會拋出一些東西 - 這將我帶到了最後;這不會編譯 - 缺少'interface'聲明中的名稱。 –

+0

明天你可以添加默認方法,當它是未來:) – ZhongYu

回答

1

它正式聲明的目的是爲了向後兼容實現舊接口的客戶端(否則它們都必須返回並實現這個新的方法)。它只是爲了這個目的而添加的,而不是最初的Java特性。但說實話,這不是什麼大問題,而且我認爲增加的易用性當然可以接受。

1

官方來源,我能找到甲骨文有關的default接口方法的使用目的是(source):

默認方法使您可以向庫的接口添加新功能並確保二進制兼容性使用爲這些接口的舊版本編寫的代碼。

不過,我把它當作是一樣的abstract類,定義abstract方法是必須由子類實現(在這種情況下,沒有缺省實現接口的方法),以及提供具體方法是可能會被子類重寫(默認接口方法)。

相關問題