- 博客(11)
- 资源 (1)
- 收藏
- 关注
原创 JDK8新特性:使用Method References实现方法复用,简化lambda表达式
之前的文章已经介绍了函数式接口与lambda表达式,这篇文章主要学习下方法引用。使用方法引用,可以减少lambda表达式的书写,在Stream API中很常用。我们想实现整数list的排序,使用lambda我们还得自己编写一个Comparator对象(虽然也很简单),实际上JDK类库已经提供了类似的实现,我们通过Integer::compare就可以引用已经存在的方法。
2017-01-18 10:36:19 1908 1
原创 JDK8新特性:使用Optional避免null导致的NullPointerException
Optional实际上是个容器:它可以保存类型T的值,或者仅仅保存null。Optional提供很多有用的方法,这样我们就不用显式进行空值检测。
2017-01-15 20:00:13 113168 9
原创 消息摘要、MAC(消息认证码)、数字签名扫盲贴
消息摘要与MAC的区别,消息摘要只能保证消息的完整性,MAC不仅能够保证完整性,还能够保证真实性。MAC不能保证消息的不可抵赖性,而数字签名可以保证。
2017-01-14 15:56:50 16596
原创 JDK8新特性:编译器保留方法参数名字
很长一段时间里,Java程序员一直在发明不同的方式使得方法参数的名字能保留在Java字节码中,并且能够在运行时获取它们(比如Paranamer类库)。最终,在Java 8中把这个强烈要求的功能添加到语言层面(通过反射API与Parameter.getName()方法)与字节码文件(通过新版的javac的–parameters选项)中。
2017-01-12 13:19:34 7814 1
原创 JDK8新特性:重复注解Repeating Annotations
注解并不是什么新鲜东西了,比如spring中存在大量注解简化我们的配置。但是在JDK8之前,我们是不能使用重复注解的,即某个位置相同注解只能出现一次。这里有个使用@Repeatable( Schedules.class )的注解类Schedule,Schedules仅仅是Schedule注解的数组,但Java编译器并不想让程序员意识到Schedules的存在。这样对使用者而言,Target就拥有了两个Schedule注解,而不是1个Schedules注解。同时,反射相关的API提供了新的函数getAnnot
2017-01-12 09:20:28 3144
原创 JDK8新特性:lambda入门
lambda其实就是为@FunctionalInterface服务的,能够用一种全新的、简洁的语法创建函数式接口的对象。当然如果一个接口不符合函数式接口的定义,是不能通过lambda表达式来创建其对象的。lambda其实就是定义入参、函数体、返回值,然后可以生成任意一个接口(符合该函数入参和返回值的函数式接口)的对象。
2017-01-11 09:26:39 2180
原创 maven项目构建:maven-antrun-plugin插件实现文件内容拷贝和文件重命名
maven-antrun-plugin插件实现文件内容拷贝和文件重命名
2017-01-10 20:07:32 9180
原创 JDK8新特性:函数式接口@FunctionalInterface的使用说明
通过JDK8源码javadoc,可以知道这个注解有以下特点:1、该注解只能标记在"有且仅有一个抽象方法"的接口上。2、JDK8接口中的静态方法和默认方法,都不算是抽象方法。3、接口默认继承java.lang.Object,所以如果接口显示声明覆盖了Object中方法,那么也不算抽象方法。4、该注解不是必须的,如果一个接口符合"函数式接口"定义,那么加不加该注解都没有影响。加上该注解能够更好地让编译器进行检查。如果编写的不是函数式接口,但是加上了@FunctionInterface,那么编译器会报错。
2017-01-06 14:03:29 120321 18
原创 JDK8新特性:接口的静态方法和默认方法
在jdk8之前,interface之中可以定义变量和方法,变量必须是public、static、final的,方法必须是public、abstract的。JDK8及以后,允许我们在接口中定义static方法和default方法。静态方法,只能通过接口名调用,不可以通过实现类的类名或者实现类的对象调用。default方法,只能通过接口实现类的对象来调用。
2017-01-06 10:46:53 36809 21
原创 Guava库:Preconditions实现优雅校验
实际开发中需要做入参校验的情况比比皆是,比如开发一个rest接口,肯定要对参数各种校验,防止错误的输入导致程序出错。我们可以使用Preconditions(前置条件),这样我们自己代码中就不会出现大段的if代码了。Preconditions类似我们写junit单元测试或者spring中的assert。
2017-01-05 09:58:30 8368
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人