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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/336338.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【FFMPEG源码终极解析】 av_packet_alloc 与 av_packet_free

关于void *av_malloc(size_t size)可以参考av_malloc av_packet_alloc实际是分配AVPacket以后,调用av_init_packet对AVPacket的成员变量进行初始化赋值。 AVPacket *av_packet_alloc(void) {AVPacket *pkt av_mallocz(sizeof(AVPacket));if (!pkt)return pkt;av_…

visual2019没有勾选的在如何加入_发票管理系统完成升级,勾选认证平台改头换面,你所有的问题都在这里!...

发票系统2.0版上线为了进一步优化增值税发票系统,提高用户体验,根据国家税务总局安排部署,我省将于2019年11月1日对增值税发票管理系统进行全面升级改造为增值税发票管理系统2.0版。增值税发票综合服务平台是现有增值税发票选择确认平台的升级…

linux 多线程实现倒计时,Linux用脚本实现“时分秒“倒计时功能

1.怎样实现“时分秒“倒计时在Linux下,脚本的完成相对于C语言来说稍微随意一点,可以按照字的想法写,只要有逻辑就可以了。示例:注意:clean的功能这个命令将会刷新屏幕,本质上只是让终端显示页向后翻了一页&…

【FFMPEG源码终极解析】void av_packet_unref(AVPacket *pkt)

av_packet_unref 该接口使用了如下调用,该接口主要作用是清理AVPacket中的所有空间数据,清理完毕后进行初始化操作,并且将 data 与 size 置为0,方便下次调用。 void av_packet_unref(AVPacket *pkt) {av_packet_free_side_data(pkt);av_buf…

sqoop sqoop2_在Sqoop中管理密码的关键提示

sqoop sqoop2Sqoop是流行的Hadoop数据传输工具。 Sqoop允许从结构化数据存储(如关系数据库,企业数据仓库和NoSQL数据存储)轻松导入和导出数据。 Sqoop还与Hive,HBase和Oozie等基于Hadoop的系统集成。 在此博客文章中,…

百分比单位始终根据父元素相应值来计算_CSS Viewport 单位,很多人还不知道使用它来快速布局!...

**CSS Viewport units(视口单位)**在过去几年已经出现了,随着时间的推移,越来越多的开发人员开始使用它们。它们的好处在于为我们提供了一种不需要使用J avaScript 就能以动态的方式调整大小的方法。而且,如果它失效,也有很多备用…

java set方法不生效_使您的Java 8方法引用生效

java set方法不生效方法参考 众所周知,我们可以使用Java 8中的方法引用 (例如String::isEmpty来引用例如在元素上流式传输时使用的方法。 看一下以下代码片段: Stream.of("A", "", "B").filter(Stream::isEmp…

linux macos 界面对比,GNOME 3与Mac OS X 10.7 (Lion)的纵览模式比较

在Twitter上与ibuick同学聊了一些Mac OS X新的设计,还有GNOME等。我突然意识到,Apple并不是引领一切的,很多方面,它甚至是向Linux下的GNOME、KDE学来的(比如出现于Leopard的Space)。更有意思的是,前些日子我刚玩过最新…

【音视频安卓开发 (四)】AndroidStudio项目配置权限、jni库路径、ABI

读写权限 权限(版本) 添加jni用到库所在的路径 设置cmake和NDK参数 cmake项目配置

犀牛重建曲面_【教程】Rhino犀牛面包机建模教学(含模型领取)

建模渲染教学视频可关注◾B站:卓尔谟工业设计小站;◾视频号:学犀牛网校教程:戎尚老师 / 编辑:老白建模步骤01、导入背景,画出面包机半边弧线并镜像;02、对照侧视图高度,用线拉成体&a…

selenium架构_Selenium测试的干净架构

selenium架构在此博客文章中,我想介绍一种具有最佳设计模式的Selenium测试的简洁架构:页面对象,页面元素(通常称为HTML包装器)以及自行开发的非常小巧的框架。 该体系结构不限于示例中使用的Java,也可以以任…

linux dns配置和安装,linux dns服务器 安装配置详解

一,什么是DNSDNS 是计算机域名 (Domain Name System) 的缩写,它是由解析器和域名服务器组成的。域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器。其中域名必须对应一个IP地址,而I…

C++ 【随想录】(四)【Makefile】

编译流程 预处理 gcc -E test.c -o test.i test.c源码进行预处理,预处理后停止编译,预处理后文件体积会变大,且为文本格式 编译 gcc -S test.i -o test.s 编译预处理的文件 汇编 gcc -c test.s -o test.o .s转成二进制文件 链接 gcc te…

mfc从文件中读取数据_Python 中的 bytes、str 以及 unicode 区别

从Python发展历史谈起Python3和Python2表示字符序列的方式有所不同。Python3字符序列的两种表示为byte和str。前者的实例包含原始的8位值,即原始的字节;后者的实例包括Unicode字符。Python2字符序列的两种表示为str和unicode。与Python3不同的是&#xf…

datetime 日期_用Hamcrest验证DateTime和日期

datetime 日期自从我开始涉足自动化测试和练习TDD以来,验证日期值很痛苦。 幸运的是,这里有一个不错的库,可用于遗留Date和新的Java 8 DateTime API ,从而解决了这一难题。 如果您属于Java开发社区中较健康的部分,并且…

linux字符雨,linux周记

shell脚本基础格式要求:首行shebaang机制#!/bin/bash#!/usr/bin/python#!/usr/bin/perlshell脚本用途:自动化常用命令执行系统管理和故障排除创建简单的应用程序处理文本或文件bash中变量的种类局部变量:生效范围为当前shell进程;…

【音视频安卓开发 (一)】AndroidStudio项目配置权限、jni库路径、ABI、Cmake

cmake项目配置 # For more information about using CMake with Android Studio, read the # documentation: https://d.android.com/studio/projects/add-native-code.html# Sets the minimum version of CMake required to build the native library.cmake_minimum_require…

string index out of range_Java 12 骚操作, String居然还能这样玩!

坐稳了&#xff0c;准备起飞&#xff01;1、transformtransform&#xff1a;即字符串转换&#xff0c;来看下 transform 的实现源码&#xff1a;public <R> R transform(Function<? super String, ? extends R> f) {return f.apply(this); }传入一个函数式接口 F…

弹性架构_实践中的弹性基础架构

弹性架构几周前&#xff0c;我获得了一个难得的机会&#xff0c;可以在基础设施领域中沾沾自喜。 在JVM内部的深入了解下&#xff0c;我每天的工作经历发生了有趣的变化&#xff0c;我想与您分享动机和成果。 希望它可以启发类似的问题类别。 背景 我将从解释需要解决方案的上…

linux的ctrl alt f6的作用,Linux(Centous6.4)操作系统中,快捷键Alt+Ctrl+F10是什么作用?...

满意答案John_05152017.07.16一些常用快捷键切换到第一个文本终端。在Linux 下你可以有多达六个不同的终端。这个命令的意思是&#xff1a;“同时按住键和键&#xff0c;然后按键&#xff0c;再释放所有的键”。(n1..6)&#xff1a;切换到第n个文本终端。(你也可以使用不是很经…