1. Java8新增的Option類本質上相似於異常檢查,迫使API用戶關注/處理Option類中是否包含內容,從而避免由於null值檢查而致使的潛在隱患;segmentfault
2. Option不支持序列化,而且要儘可能避免將Optional用於類屬性、方法參數、集合元素。這三種狀況能夠用null值代替,不必用Option;app
3. Option自己爲引用類型,大量使用在必定程度上會影響JVM的堆內存和垃圾回收;函數
4. 避免使用Optional的 equals()、hashCode()、==方法;參見這裏spa
Optional的構造函數是私有的,不能由外部調用(不能new)3d
若是value參數爲空,會報NPE異常,通常不用;blog
若是value參數爲空,會報No value present異常;接口
判斷Option中是否有元素;內存
若是Optional有元素,就消費;方法中的參數Consumer爲函數式接口get
獲取Option中的元素,必定要配合isPresent()方法使用;hash
不管Optional容器是null仍是non-null,都會執行orElse裏的方法,若是Option容器爲空,則將參數中的value放在Optional容器,不然不放;
只有Optional容器爲null,纔會執行orElse裏的方法,方法中的參數Supplier爲函數式接口,該接口默認抽象get方法參數爲空;
只有Optional容器爲null,纔會執行orElseThrow的方法,方法中的參數Supplier爲函數式接口,該接口默認抽象get方法參數爲空;
針對Optional容器裏的元素進行過濾,方法中的參數Predicate爲函數式接口,該接口默認方法爲test(T t);
針對Option中的元素進行運算,以下:Optional容器中維護了一個List,List中存放Apple,目的是將Apple重量大於150的蘋果記錄;