2017-05-23 31 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

相关问题