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

接口中的默认方法和静态方法相关推荐

  1. Java8新特性Optional、接口中的默认方法与静态方法

    Optional Optional 类(java.util.Optional) 是一个容器类,代表一个值存在或不存在,原来用 null 表示一个值不存在,现在 Optional 可以更好的表达这个概念 ...

  2. 接口中默认方法和静态方法_接口中的默认方法和静态方法

    接口中默认方法和静态方法 在我们最初的Java 8支持公告中,我们特别提到了流的缺乏,但完全错过了默认/静态本机接口不起作用的事实. 现在,由于有一个警惕的社区成员指出了这一问题,因此此问题已得到解决 ...

  3. Java接口中的默认方法冲突

    在Java中,我们可以为其接口中定义的方法提供一个默认的实现.当然,这可能并没有很大的用处,不过,在某些情况下可能很有用!如果要为接口方法提供一个默认实现,必须要用 default关键字 修饰. 在为 ...

  4. Java8新特性_接口中的默认方法

    默认方法由来猜想 1. Collection接口.Collections公共类.  同是操作集合,为啥要搞俩?没必要.在接口中搞一些默认实现,一个接口即搞定了. 2. Java8支持Lambda表达式 ...

  5. 为什么Java在后来的版本中,给接口增加了默认方法、静态方法、私有方法?

    在业务发展过程中,发现某个功能是所有子类都需要的,那么我们该怎么办?给接口增加抽象方法吗?如果直接在接口增加抽象方法,那么所有已经写好的具体实现类就会报编译错误.因为具体类必须实现接口的全部抽象方法. ...

  6. Java接口、implements关键字、接口中抽象方法,默认方法,静态方法,私有方法,常量、final关键字

    接口: 接口是Java语言中一种引用类型,是方法的集合,如果说类的内部封装了成员变量.构造方法和成员方法,那么 接口的内部主要就是封装了方法,包含抽象方法(JDK 7及以前),默认方法和静态方法(JD ...

  7. Java 8——接口中个的默认方法和静态方法

    在Java SE 8之前,interface只是事物的抽象,用来定义统一的抽象事物和描述事物的抽象行为和属性. 但是在Java SE 8中,增加了可以在interface中增加默认实现的行为和事物的静 ...

  8. 超详细解读Java接口:模块通信协议以及默认方法和静态方法

    有不少学习Java的同学一直有个疑问,不仅在初学者中很普遍,连许多经验丰富的老手也很难表述清楚,那就是:Java接口到底是什么? 来看看孙鑫老师的讲解,本文干货含量拉满,这可能是距离你深入理解Java ...

  9. Java 8:声明接口中的私有方法和受保护的方法

    引入Java 8时,我们可以在接口中使用默认方法. 此功能的主要驱动程序是允许扩展接口,同时保留对旧接口版本的向后兼容性. 一个示例是在现有Collection类中引入stream()方法. 有时,当 ...

最新文章

  1. C++ 偏微分数值计算库_【动手学计算机视觉】第一讲:图像预处理之图像去噪...
  2. 【ElasticSearch】ElasticSearch-SQL插件
  3. 《山谷物语》要怎么成为Supercell下一款年收入10亿美元的产品?
  4. 示波器测ab相_独有功能,剑走偏锋,示波器鲜为人知的10大特异功能|测试能力篇...
  5. 简单理解Tomasulo算法与重加载缓冲区
  6. Arts 第四周(4/8 ~ 4/14)
  7. [JavaWeb-Bootstrap]Bootstrap快速入门
  8. SqlBulkCopy 批量复制数据到数据表
  9. [Jmeter] 基本使用的总结
  10. 福建品品香茶业有限公司业务迁移上云
  11. flowjo软件使用方法_管家婆软件使用方法出库教程,管家婆软件做账流程视频_双全科技...
  12. react循环的值为什么要有key_react中为何推荐设置key
  13. 【final】站立会议---11.27
  14. Codeforces Round #FF (Div. 2) D. DZY Loves Modification 贪心+优先队列
  15. 安笙机器人_张翰新戏搭档徐璐!包贝尔要和辛芷蕾演奇幻电影?
  16. 杉车大数据:禁售燃油车政策终于实施了!!!
  17. 2. Mysql 升级 与 升级后 mysql --version 和 select version() 不一致问题
  18. 利用Python程序读取Excel创建折线图
  19. 977计算机考研,中国海洋大学 977计算机技术与软件工程专业课经验分享
  20. 刚装好的mysql设置密码_第一次装好mysql后要设置密码

热门文章

  1. 09-一对多关系建表
  2. 三星系统和鸿蒙系统,又一设备直升鸿蒙系统,现有操作系统被抛弃,和三星的想法一样!...
  3. oracle中join另一个表后会查询不出一些数据_面试必备 | 8个Hive数据仓工具面试题锦集!...
  4. 10人以下小团队管理手册-学习笔记
  5. 机器学习评价指标大汇总
  6. k66 pit计时功能配置_PIT,JUnit 5和Gradle –仅需额外的一行配置
  7. java锁_Java锁
  8. pom.xml中pom全称_摆脱pom XML…几乎
  9. graalvm_GraalVM上的Picocli:极快的命令行应用程序
  10. 使用枚举映射_用EnumMaps映射枚举键