看了下java8的新特性,記下筆記,java
1.添加了Optional,ide
這個是guava裏面出現的,如今java8裏面也支持了,Optional是用來處理null值的。函數
用法基本和guava裏面的一致,this
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")); }
輸出的值爲:spa
true
abc
false
abcdcode
當裏面有值的時候,使用orElse是會獲得原來的值的,如當orm
Optional<String> str = Optional.of("abc");
System.out.println(str.orElse("123"));
這時輸出的是abcblog
2.接口中能添加默認方法了,示例以下接口
public interface Formula { double calculate(int a); /** * java8 新特性 接口中能添加默認方法,又叫作擴展方法,實現這個接口,不須要重寫默認方法,能夠直接用 * @param a * @return */ default double sqrt(int a) { return Math.sqrt(a); } }
默認方法能夠實現,須要用default關鍵字get
實現這個接口的類不須要重寫默認方法
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 的新特性就記錄到這裏