接口中的默认方法和静态方法

在我们最初的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

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值