optional

Java8新特性之接口默认方法

爷,独闯天下 提交于 2020-08-06 12:14:06
JAVA8 已经发布很久,而且毫无疑问,java8 是自 java5(2004年发布)之后的最重要的版本。其中包括语言、编译器、库、工具和 JVM 等诸多方面的新特性。Java8 新特性列表如下: 接口默认方法 函数式接口 Lambda 表达式 方法引用 Stream Optional 类 Date API Base64 重复注解与类型注解 接口默认方法 1、什么是接口默认方法 从 Java8 开始,程序允许在接口中包含带有具体实现的方法,使用 default 修饰,这类方法就是默认方法。默认方法在接口中可以添加多个,并且 Java8 提供了很多对应的接口默认方法。 2、设计接口默认方法好处 使用接口编程的好处是的开发是面向抽象而不再是面向具体来编程,使得程序变得很灵活,缺陷是,当需要修改接口时候,此时对应需要修改全部实现该接口的类,举个例子, java 8 之前对于我们常用的集合框架没有 foreach 方法,通常能想到的解决办法是在 JDK 里给相关的接口添加新的方法及实现。从 Java8 开始,引入了接口默认方法,这样的好处也是很明显的,首先解决了 Java8 以前版本接口兼容性问题,同时对于我们以后的程序开发,也可以在接口子类中直接使用接口默认方法,而不再需要再各个子类中各自实现响应接口方法。 3、默认方法 jdk8 中,接口可以包含实现方法,需要使用 default 修饰

iTOP-4412开发板-Android4.4-Bluetooth移植文档

試著忘記壹切 提交于 2020-08-06 11:08:56
目录 目录........................................................................................................................................... 1 1.1 概述.................................................................................................................................. 1 1.2 硬件相关部分 .................................................................................................................. 2 1.3 Kernel ............................................................................................................................... 4 1.3.1 概述.....................................

写好测试,提升应用质量

杀马特。学长 韩版系。学妹 提交于 2020-08-06 07:48:12
相信在国内一些中小型公司,开发者很少会去写软件测试相关的代码。当然这背后有一些原因在。本文就讲讲 iOS 开发中的软件测试相关的内容。 一、 测试的重要性 测试很重要!测试很重要!测试很重要!重要的事情说三遍。 场景1:每次我们写完代码后都需要编译运行,以查看应用程序的表现是否符合预期。假如改动点、代码量小,那验证成本低一些,假如不符合预期,则说明我们的代码有问,人工去排查问题花费的时间也少一些。假如改动点很多、受影响的地方较多,我们首先要大概猜测受影响的功能,然后去定位问题、排查问题的成本就很高。 场景2:你新接手的 SDK 某个子功能需要做一次技术重构。但是你只有在公司内部的代码托管平台上可以看到一些 Readme、接入文档、系统设计文档、技术方案评估文档等一堆文档。可能你会看完再去动手重构。当你重构完了,找了公司某条业务线的 App 接入测试,点了几下发现发生了奔溃。😂 心想,本地测试、debug 都正常可是为什么接入后就 Crash 了。其实想想也好理解,你本地重构只是确保了你开发的那个功能运行正常,你很难确保你写的代码没有影响其他类、其他功能。假如之前的 SDK 针对每个类都有单元测试代码,那你在新功能开发完毕后完整跑一次单元测试代码就好了,保证每个 Unit Test 都通过、分支覆盖率达到约定的线,那么基本上是没问题的。 场景3:在版本迭代的时候,计划功能 A,从开发

关于Java8的精心总结

前提是你 提交于 2020-08-06 03:53:23
前言 ​ 最近公司里比较新的项目里面,看到了很多关于java8新特性的用法,由于之前自己对java8的新特性不是很了解也没有去做深入研究,所以最近就系统的去学习了一下,然后总结了一篇文章第一时间和大家分享一下。 ​ ​ 在了解一项新技术之前,我们需要了解我们为什么要去学习它以及它的优点,以下是我总结的: Java8(又称jdk1.8)是java语言开发的一个主要版本,Java8是oracal公司于2014年3月发布,可以看成是自java5以来最具有革命性的版本。 新特性的优点: 速度更快、代码更少、便于并行、最大化减少空指针异常 函数式编程提供了一种更高层次的抽象化 排序: List<RoleEntity> rolesListSort = rolesList.stream().sorted(Comparator.comparing(RoleEntity::getCreateDate)).collect(Collectors.toList()); Consumer是一个函数式接口 参数是Consumer类型的,Consumer里面的泛型表示泛型的类型要么是Integer,要么是Integer的父类,super表示它及它上面的,也就是父类。 下面这段代码是在Iterable接口里面的默认方法,jdk8之后的新方法,默认方法(默认方法的引入很大程度上是为了保证向后兼容) default

Java Stream

落花浮王杯 提交于 2020-08-05 21:11:19
1 Stream简介 Stream是数据渠道,用于操作数据源(集合,数组等)所生成得元素序列。而集合讲得是数据,流讲得是计算。 注意: Stream 自己不会存储元素。 Stream 不会改变源对象。相反,它会返回一个持有结果得新Stream Stream 操作时延迟执行得,这意味着它们会等到需要结果时才执行。(延迟加载) Stream 操作步骤 Stream 创建: 一个数据源(集合,数组),获取一个流。 Stream 中间操作: 一个中间操作链,对数据源的数据进行处理。 Stream 终止操作: 一个终止操作,执行中间操作链,并产生结果。 2 Stream 用法 2.1 创建Stream //1. 通过 Collection.stream() / parallelStream() 创建Stream List<String> list = new ArrayList<String>(); Stream<String> stream11 = list.stream(); // 串行流 Stream<String> stream12 = list.parallelStream(); // 并行流 //2. 通过 Arrays.stream() 获取数组流 IntStream stream2 = Arrays.stream(new int[]{1,2}); // 串行流 //3. 通过

iOS面试题-Swift篇

别说谁变了你拦得住时间么 提交于 2020-08-05 16:32:04
Python实战社群 Java实战社群 长按识别下方二维码, 按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群 ▲ 作者 | 齐金亮 来源 | CocoaChina http://www.cocoachina.com/articles/899004?filter=rec 先介绍一下 Swift Swift是苹果在2014年6月WWDC发布的全新编程语言,借鉴了JS,Python,C#,Ruby等语言特性,看上去偏脚本化,Swift 仍支持 cocoa touch 框架 他的优点: Swift更加安全,它是类型安全的语言。 Swift容易阅读,语法和文件结构简易化。 Swift更易于维护,文件分离后结构更清晰。 Swift代码更少,简洁的语法,可以省去大量冗余代码 Swift速度更快,运算性能更高 Swift 和OC 如何相互调用? Swift 调用 OC代码 需要创建一个 Target-BriBridging-Header.h 的桥文件,在乔文件导入需要调用的OC代码头文件即可 OC 调用 Swift代码 直接导入 Target-Swift.h文件即可, Swift如果需要被OC调用,需要使用@objc 对方法或者属性进行修饰 类(class) 和 结构体(struct) 有什么区别? 在 Swift 中,class 是引用类型(指针类型),

IDEA版: MongDB整合Spring data

烈酒焚心 提交于 2020-08-05 16:13:28
经过上一篇使用, 配置IDEA的Mongdb写的代码是比较多的, 是最原始编码, 这篇提供更为方便快捷的代码整合方式, 小伙伴们,开始喽~~ 一. 搭建环境 步骤一:更换Pom.xml中依赖坐标 < dependencies > <!--mongodb <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>3.4.3</version> </dependency>--> <!--测试--> < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter-test </ artifactId > </ dependency > < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter-data-mongodb </ artifactId > </ dependency > < dependency > < groupId > org.projectlombok </

SkyWalking 调用链忽略(取消跟踪)

余生颓废 提交于 2020-08-05 15:49:37
版本:7.0.0 描述 在某些场景下,我们可能对一些调用链路不关心,但是这部分数据还挺大的,大到会影响我们正常的业务。比如一些中间件的心跳。 这个时候可以选择性的忽略一些调用链,SkyWalking将不在收集忽略掉的数据。 在SkyWalking中,有三种手段忽略不需要跟踪的数据。 禁用插件。 引入忽略插件,配置指定忽略端点(endpoint)集合。 配置指定忽略链路的第一个span的操作后缀名称。 配置 1. 禁用插件 我们可以移除掉 agent/plugins/ 目录下特定的jar包,来忽略对特定组件的链路跟踪。例如:移除rocketmq插件包来忽略rocketmq的链路追踪。 2. 引入忽略插件 将 agent/optional-plugins 目录下的 apm-trace-ignore-plugin-xxx.jar 复制到 agent/plugins/ 目录下。 两种配置方式,第一种方式是在 config 目录下新增 apm-trace-ignore-plugin.config 文件,配置 trace.ignore_path=${SW_AGENT_TRACE_IGNORE_PATH:/eureka/**} ,第二种方式是增加环境变量 -Dskywalking.trace.ignore_path=/eureka/** ,重启应用,SkyWalking将不在采集指定路径的数据。

Java并没有衰落.大家对它的认识才刚刚开始 Java8全新出发

纵然是瞬间 提交于 2020-08-05 08:13:51
Java并没有衰落.大家对它的认识才刚刚开始 很高兴能在此给大家分享Java8的新特性。这篇文章将一步一步带你了解Java8的所有新特性。我将通过简单的实例代码向大家展示接口中默认方法,lambda 表达式,方法引用,重复注解的使用. 看过这篇文章之后你将了解流、函数、接口、map扩展、日期中的新变化.不废话,放码过来! Default Methods for Interfaces(接口中的默认方法) Java 8准许我们在接口中增加一个通过default关键字修饰的非抽象的方法. 这个特性被我们称为扩展方法. 下面举例说明: interface Formula { double calculate(int a); default double sqrt(int a) { return Math.sqrt(a); } } 接口Formula 中除了抽象方法calculate 其中还定义了非抽象方法sqrt. 实现类里面继承了抽象方法calculate. 而默认方法可以直接调用. Formula formula = new Formula() { @Override public double calculate(int a) { return sqrt(a * 100); } }; formula.calculate(100); // 100.0 formula.sqrt(16);

Android6.0 RK3399 PWM Backlight 驱动分析 · Younix’s Studio【转】

泄露秘密 提交于 2020-08-05 05:24:13
转自: https://www.dazhuanlan.com/2019/10/25/5db29684e6460/ Platform: RK3399 OS: Android 6.0 Kernel: 4.4 DTS 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 backlight: backlight { status = "disabled"; compatible = "pwm-backlight"; pwms = < &pwm0 0 25000 0>; brightness-levels = < 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89