2017-08-26 61 views
-4

为什么我们需要在实现FunctionalInterface时编写“implements FI”?为什么我们需要在实现功能接口时编写“implements InterfaceName”?

@FunctionalInterface 
interface FI 
{ 
void sayHello(String name);  
} 

public class Hello implements FI 
{ 
    public static void main(String[] args) 
    { 
    // TODO Auto-generated method stub 
    FI fi = (name) -> System.out.println("Hello " + name); 
    fi.sayHello("world"); 
    } 
} 
+3

你不需要它([证明](https://ideone.com/5gZge4))。你的代码甚至不会编译,因为你的类'Hello'没有实现'FI'的'sayHello'方法。投票不可重复。 – dasblinkenlight

+0

你的代码确实不会编译([proof](https://ideone.com/dj0Bl3))。 –

回答

1

@FunctionalInterface只是从编译器强制执行校验,以使注释的接口只有一个abstract方法,没有更多办法。

另外它明确指出,

然而,编译器会将任何接口会议功能接口的定义,功能接口,无论一个FunctionalInterface注释是否存在于接口声明。

因此,甚至不需要明确注释它。

带注释的接口仍然是一个接口,它用作Java代码中的所有其他接口,因此您需要专门指定何时实现它。

但作为一个功能界面允许您定义直接覆盖它拉姆达:

FI fi = name -> System.out.println(name); 
1

你不

interface FI { 
    void sayHello(String name); 
} 

public class Hello { 
    public static void main(String[] args) { 
    FI fi = (name) -> System.out.println("Hello " + name); 
    fi.sayHello("world"); 
    } 
} 

你好不作为功能接口,并且还@FunctionalInterface只是让编译器执行单一方法合约。

相关问题