2017-05-23 30 views
1

我想了解更多關於Java 8 FunctionalInterface註釋。我寫了下面的代碼作爲實驗,但它並不能編譯:沒有在功能接口中找到的目標方法

@FunctionalInterface 
public interface HasToString { 

    String toString(); 
} 

沒有目標的方法找到

有趣的是,這確實編譯:

@FunctionalInterface 
public interface HasToString { 

    String notToString(); 
} 

爲什麼這是?

+0

您正在重寫Object的toString()方法。所以這不是一個抽象的方法,而是一個具體的方法。 –

回答

4

這在JLS 9.8

陳述的功能性接口是具有(從對象的方法除外)一個抽象方法的接口,並且因此代表一個單一的功能的合同。這種「單一」方法可以採取多種抽象方法的形式,並且具有從超級接口繼承的覆蓋等價簽名;在這種情況下,繼承的方法在邏輯上代表一種方法。

由於toString是「Object類的公共實例方法」,你的界面沒有資格成爲一個功能接口。

+0

沒錯,除了Object的實例方法之外的所有東西 – Zarkopafilis

相關問題