接口中默认方法和静态方法
在我们最初的Java 8支持公告中,我们特别提到了流的缺乏,但完全错过了默认/静态本机接口不起作用的事实。 现在,由于有一个警惕的社区成员指出了这一问题,因此此问题已得到解决。
由于限制需要全新构建才能使它们正常工作,因此对于Retrolambda ,这些功能似乎默认情况下处于关闭状态。 这对Codename One构建服务器体系结构没有限制,因此这些功能对于Codename One应用程序应该可以正常工作。
什么是默认接口方法?
默认接口方法允许您将新方法添加到接口并提供默认实现。 这有效地使我们能够向前推进API,而不会破坏与实现此接口的人员的兼容性。 例如:
public interface DefaultInterfaceTest {String method();default String methodWithArg(String arg) {return method();}
}
对于大多数开发人员而言,这并不重要,因为我们通常只需添加新方法并解决问题即可。 但是,将来在将Codename One的实现转移到Java 8语法时,这将是一个巨大的进步,因为它将允许我们向较旧的接口(例如PushCallback)添加方法。
什么是静态接口方法
静态接口方法通常只是静态方法。 在许多情况下,我们只是将静态方法隐藏在句柄中,但有时这没有意义。 例如, Push类完全由静态方法组成,作为独立类没有多大意义。 我们可以将类中的所有方法作为静态方法滚动到接口中,并完全消除该类。
这不一定是“好的做法”,但是对于某些用例而言,这可能是持有该方法的更好位置。
例如:
public interface StaticInterfaceTest {String method();static String getNotNull(StaticInterfaceTest it, String def) {String s = it.method();if(s == null) return def;return s;}
}
您可以在Java教程中阅读有关默认和静态接口方法的信息。
切换到完整Java 8吗?
如上所述,将Codename One本身的代码库转换为Java 8将会获得很多价值。目前,我们仍支持构建Java 5应用程序,并且在3.4推出之前可能不会改变它,因为我们当前的目标是更加稳定。比什么都重要。 但是,一旦3.4推出,我们可能隐含地使所有构建都使用Java 8功能,并切换内部代码库以使用它。
即使您使用旧的Java 5项目,在进行这种转换后,构建仍然可以正常工作,并且不会被迫切换,但是,这将使我们能够使用默认方法等功能来实现所需的某些功能。 通过允许我们在核心实现中使用lambda,这也将使生活变得更轻松。
翻译自: https://www.javacodegeeks.com/2016/04/default-static-methods-interfaces.html
接口中默认方法和静态方法