jdk8

Java 8新特性探究(六)泛型的目标类型推断

谁说胖子不能爱 提交于 2019-11-29 13:09:00
简单理解泛型 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。通俗点将就是“类型的变量”。这种类型变量可以用在类、接口和方法的创建中。 理解Java泛型最简单的方法是把它看成一种便捷语法,能节省你某些Java类型转换(casting)上的操作: List<Apple> box = new ArrayList<Apple>();box.add(new Apple());Apple apple =box.get(0); 上面的代码自身已表达的很清楚:box是一个装有Apple对象的List。get方法返回一个Apple对象实例,这个过程不需要进行类型转换。没有泛型,上面的代码需要写成这样: Apple apple = (Apple)box.get(0); 泛型的尴尬 泛型的最大优点是提供了程序的类型安全同时可以向后兼容,但也有尴尬的地方,就是每次定义时都要写明泛型的类型,这样显示指定不仅感觉有些冗长,最主要是很多程序员不熟悉泛型,因此很多时候不能够给出正确的类型参数,现在通过编译器自动推断泛型的参数类型,能够减少这样的情况,并提高代码可读性。 java7的泛型类型推断改进 在以前的版本中使用泛型类型,需要在声明并赋值的时候,两侧都加上泛型类型。例如: Map<String, String> myMap = new HashMap

JDK8新特性

孤街醉人 提交于 2019-11-27 18:28:58
JDK8新特性 1、FunctionInterface 是什么?和Lambda表达式有什么关系? package com.wood.functional;/** * @Description: 函数式接口 * @Author wood * @Date 2019-08-15 * * @FunctionalInterface 声明一个接口是函数式接口,目的是可以用lambda表达式的方式实现接口 * 函数式接口只能包含一个抽象方法,重写父类的方法不算 * Java中所有的对象都是继承自Object,所以MyInterface实际上是继承自Object,所以有toString() * * 在将函数作为一等公民的语言(JavaScript、Python)中,Lambda表达式(匿名函数、闭包)是函数, * 但在Java中,Lambda表达式是对象(Java中一切皆对象),必须依附于一类特别的对象FunctionalInterface * * JDK8强调传递行为,而不仅仅是数据 * */@FunctionalInterfacepublic interface MyInterface { // 函数式接口只能包含一个抽象方法 void test(); // 重写父类(Object)的方法不算,所以能够编译通过 String toString();} package com.wood

Java 8新特性探究(五)重复注解(repeating annotations)

此生再无相见时 提交于 2019-11-27 09:20:58
知识回顾 前面介绍了: lambda表达式和默认方法 (JEP 126) 批量数据操作(JEP 107) 类型注解(JEP 104) 注:JEP=JDK Enhancement-Proposal (JDK 增强建议 ),每个JEP即一个新特性。 在java 8里面,注解一共有2个改进,一个是类型注解,在上篇已经介绍了,本篇将介绍另外一个注解的改进:重复注解(JEP 120)。 什么是重复注解 允许在同一申明类型(类,属性,或方法)的多次使用同一个注解 一个简单的例子 java 8之前也有重复使用注解的解决方案,但可读性不是很好,比如下面的代码: public @interface Authority { String role(); } public @interface Authorities { Authority[] value(); } public class RepeatAnnotationUseOldVersion { @Authorities({@Authority(role="Admin"),@Authority(role="Manager")}) public void doSomeThing(){ } } 由另一个注解来存储重复注解,在使用时候,用存储注解Authorities来扩展重复注解,我们再来看看java 8里面的做法: @Repeatable