Java 8 静态与默认方法-功能接口
我正在创建功能接口,并希望在匿名实现中重用默认方法Java 8 静态与默认方法-功能接口,java-8,functional-programming,Java 8,Functional Programming,我正在创建功能接口,并希望在匿名实现中重用默认方法 public class JavaInterfaceTest { public static void main(String[] args) { FunctionalIntf fi = () -> { System.out.println("In ananymus impl, trying to call default method"); // doInternal() re
public class JavaInterfaceTest {
public static void main(String[] args) {
FunctionalIntf fi = () -> {
System.out.println("In ananymus impl, trying to call default method");
// doInternal()
return "Hello";
};
fi.doFunction(); // How this line valid ?
fi.doInternal();
FunctionalIntf.doSomething();
}
}
@FunctionalInterface
interface FunctionalIntf {
String doFunction();
default void doInternal(){
System.out.println("In doInternal");
}
static void doSomething(){
System.out.println("In doSomething");
}
}
fi.dof如何发挥作用;是有效的,如果我通过匿名实现。
如果我想从实现中恢复默认方法或静态方法,我该如何恢复?
三,。在我的情况下,返回的是有效的/最佳实践,因为我无法处理返回的值。在创建匿名类时,实际上是从FunctionNTF接口为抽象方法doFunction提供了一个实现。因此,当您使用这一行代码时:
fi.doFunction();
这意味着您正在从匿名类调用doFunction方法。这是关于功能接口如何工作的另一个示例:
Runnable r = new Runnable() {
@Override
public void run() {
System.out.println("I'm Runnable!");
}
};
r.run();
在本例中,我们从Runnable接口重写run方法,该接口也是一个函数接口
无法为静态方法提供另一个实现,因为无法重写静态方法。静态方法在Java中根本不会被继承。相反,您可以通过重写为默认方法提供另一个实现,如上面的示例所述
关于返回值,您需要定义方法以返回所需的确切值。这方面没有最佳实践。当您实现功能接口时,有两个选项: 使用lambdas,正如您所做的那样 使用内部类。 如果您像以前一样使用lambdas,那么您将拥有静态/默认方法的默认实现以及抽象方法的实现
如果使用内部类,则通常的重写规则适用。fi.doFunction;我没有打电话。不打印文本。我只是测试它,结果是:在Anonymus impl中,尝试调用默认方法。您提出了三个完全不同的问题。此外,您似乎提出了错误的问题,如“How fi.doFunction;是否有效”,因为fi是接口类型的变量,并且您正在对其调用其定义的方法之一,所以为什么它不有效?