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

在我们最初的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. java接口能定义非抽象方法吗_接口中只能定义常量和抽象方法,对么

    接口中只能定义常量和抽象方法,对.在Java语言中,接口是一个抽象类型,是抽象方法的集合,通常以关键字interface来声明.一个类通过继承接口的方式,从而来继承接口的抽象方法. 接口中只能定义常量 ...

  2. java空类型方法无参_类的无参方法

    一.JavaDoc注释 语法: /** *@author Flc */ @author 标明开发该类模块的作者 @version 标明该类模块的版本 @see 参考转向,也就是相关主题 @param ...

  3. python中哪里用到缩进_建筑防火中各类门的总结归纳!乙级门?甲级门?都哪里用到了!...

    大家在学习防火部分时,会遇到各种场所设置不同耐火性能的防火门,很杂乱的感觉,今天这里就好好总结一下,希望对大家能有帮助!一:双设门1.防烟楼梯间:此处的防烟楼梯间分为两种:一种是普通意义上的,即咱们经 ...

  4. python方法解析顺序_浅谈Python的方法解析顺序(MRO)

    方法解析顺序, Method Resolution Order 从一段代码开始 考虑下面的情况: class A(object): def foo(self): print('A.foo()') cl ...

  5. 图像中值滤波python代码_图像中值滤波FPGA实现

    C语言实用数字图像处理.pdf6.34 MB05-11-13|19:30 FPGA实验报告-李炎东.doc633.66 kB16-01-14|10:28 中值滤波在红外成像引信中的应用及硬件实现.ca ...

  6. idea中怎么新建vue项目_项目中使用vue-awesome-swiper

    一.简介 Swiper常用于移动端网站的内容触摸滑动 Swiper是纯javascript打造的滑动特效插件,面向手机.平板电脑等移动终端,以及PC端网站.Swiper能实现触屏焦点图.触屏Tab切换 ...

  7. Java接口能不能有静态方法_接口可以在Java中使用静态方法吗?

    Java中的接口(interface)类似于类,但是它仅包含final和static的抽象方法和字段. 静态方法是使用静态关键字声明,它将与类一起被加载到存储器.您可以使用类名访问静态方法而无需实例化 ...

  8. java 反射 方法 修饰符_超类中使用默认修饰符的Java反射访问方法

    Method method = getClass().getSuperclass().getDeclaredMethod("doSomething"); method.invoke ...

  9. python 配置文件中密码不能是明文_配置文件中明文密码改为密文密码的方法

    我们用java链接数据库,不管是web项目还是小程序,都需要把数据库密码写在配置文件中(当然你要写死在程序里也没有办法),或者数据库中,通常源代码漏洞扫描都会告诉你不能有明文密码,那么有什么办法可以变 ...

最新文章

  1. KNN算法(K最近邻算法)详解
  2. Customize a Scheduling Policy
  3. 【python图像处理】python绘制灰度直方图
  4. Android 让系统自动生成缩略图并写入媒体库
  5. 牛客练习赛46 B 华华送奕奕小礼物 (预处理前缀和,二分)
  6. python可以开多少线程_python爬虫可以开多少线程?
  7. 讲讲C#中的事件和标准事件1--委托
  8. Python opencv局部直方图均衡增强
  9. 【虚幻引擎UE】UE5 fbx文件导入gltf文件在线/本地导入和切换(含骨骼动画)
  10. Linux中shell脚本详解
  11. 怎么把php转成bt_php能不能转换成bt种子
  12. Git出现 Your local changes to the following files would be overwritten by merge: con
  13. 钕铁硼产品磁性能相对检测原理与技术
  14. 精读《设计模式 - Prototype 原型模式》
  15. 微分流形与黎曼几何学习笔记(转自http://blog.sciencenet.cn/home.php?mod=spaceuid=81613do=blogid=333317)
  16. 500错误码,前端开发遇到的小坑
  17. MySQL - - 多表查询
  18. 注意:直播盒子接口采集器和直播抓包软件有木马
  19. 深入探讨用位掩码代替分支(6):VB6速度测试
  20. 浪费时间的绝不是PowerPoint软件的错

热门文章

  1. 火车载客(ybtoj-二叉堆)
  2. P6880-[JOI 2020 Final]オリンピックバス【最短路】
  3. 欢乐纪中A组赛【2019.8.23】
  4. 【ST表】栈(jzoj 2295)
  5. SpringCloud Zuul(二)之简单用法
  6. JavaFX官方教程(十)之转换类型和示例
  7. 【最全最详细】publiccms其他常用代码片段(内容、站点)
  8. ssh(Spring+Spring mvc+hibernate)——IDeptService.java和IEmpService.java
  9. 人脸注册源码faceregiste
  10. 16年国庆假期期间兼职所悟