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的苹果记录;