码迷,mamicode.com
首页 > 编程语言 > 详细

java8 新特性

时间:2015-08-18 01:15:12      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:

看了下java8的新特性,记下笔记,

1.添加了Optional,

这个是guava里面出现的,现在java8里面也支持了,Optional是用来处理null值的。

用法基本和guava里面的一致,

public static void main(String[] args) {
        Optional<String> str = Optional.of("abc");
        System.out.println(str.isPresent());
        System.out.println(str.get());
        
        str = Optional.empty();
        System.out.println(str.isPresent());
        System.out.println(str.orElse("abcd"));
    }

输出的值为:

true
abc
false
abcd

当里面有值的时候,使用orElse是会得到原来的值的,如当

Optional<String> str = Optional.of("abc");
       
        System.out.println(str.orElse("123"));

这时输出的是abc

2.接口中能添加默认方法了,示例如下

public interface Formula {
    double calculate(int a);

    /**
     * java8 新特性 接口中能添加默认方法,又叫做扩展方法,实现这个接口,不需要重写默认方法,可以直接用
     * @param a
     * @return
     */
    default double sqrt(int a) {
        return Math.sqrt(a);
    }
}

默认方法可以实现,需要用default关键字

实现这个接口的类不需要重写默认方法

3.@FunctionalInterface 注解,

用这个注解标记的接口会被认为是函数接口,即只有一个抽象方法(默认方法不是抽象方法),当有多个抽象方法的时候会出现编译错误提示

4.lambda表达式,这个是很多人都知道的变化

当实现函数式接口的时候可以使用lambda表达式

Collections.sort(list, new Comparator<String>() {
            @Override
            public int compare(String a, String b) {
                return b.compareTo(a);
            }
        });

Collections.sort(list, (String a, String b) -> b.compareTo(a));

 Collections.sort(list, (String a, String b) -> {
           return b.compareTo(a);
        });

Collections.sort(list,(a,b) -> b.compareTo(a));

这上面四种写法是等效的

lambda表示式的基本形式为 () -> {}

当整个实现写在一行时,可以去掉小括号和return关键字,()里面的是参数,可以省略参数类型

5.方法和构造器的引用

示例:

public class Person {
    private String firstName;

    private String lastName;

    Person(){}

    Person(String firstName, String listName) {
        this.firstName = firstName;
        this.lastName = listName;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public static void main(String[] args) {
        PersonFactory<Person> factory = Person::new;
        Person person = factory.createPerson("luo","lei");
        System.out.println(person.getFirstName()+" "+person.getLastName());
    }
}
public interface PersonFactory<T extends Person> {
    T createPerson(String firstName, String lastName);
}

使用::关键字,可以引用方法或构造器,这个接口只能是函数式接口

 

当然java8 还添加了一些接口,和其他的特性,我没看完

java8 的新特性就记录到这里 

java8 新特性

标签:

原文地址:http://www.cnblogs.com/luolei/p/4738167.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!