Java8 中的Optional类详解

在Java8中,引入了一个新的类java.util.Optional 。这个类专门用来解决空引用的问题。有了它,对于一个方法的返回值什么的,都不需要再判断是不是null了。同时,这个类和lambda表达式和函数式编程也可以比较好的整合在一起使用。 这里就来看一下这个类的使用。 知道Scala的同学可以类比一下 scala.Option[T] ,或者Haskell的Data.Maybe。都有类似的功能。 Optional是一个容器,里面放着我们的返回值(就是真正要用的东西),但是这个真正要用的东西可能是null呀,所以每次都要判断,但是Optional不可能是null。所以不要在判断是否为null了。 1 2 3 4 5 6 public void print(String s) { System.out.println(s); }String x = //… Optional<String> opt = //… 上面代码中,x可能是null,opt不可能是null。 建立Optional对象 首先让我们来看一下如何构造Optional对象。Optional对象有一系列静态工厂方法创建出来。 1 2 3 opt = Optional.of(notNull); opt = Optional.ofNullable(mayBeNull); opt = Optional.empty(); 以上3个方法,第一个of()从一个非null的对象创建Optional,如果传给他null,就有异常NullPointerException。 ofNullable()可以由任意对象(包括null)创建Optional。empty方法总是返回一个空的Optional。 ifPresent()方法:真的存在吗? Optional在使用的时候,有一些主要的方法,首先是ifPresent。顾名思义,即使对象是否存在的意思。就是说里面装的东西是不是null,这个和判断对象是否为null基本上也是等价的。 1 2 3 if (x != null) { print(x);…

angularjs $scope form undefined

Was developing some form with angular, things work perfect until I add a angular-ui bootstrap tab to enclose 2 different form in each tab. when i try to access the form with $scope.formName, the formName is undefined. It turns out that the angularUI tab directive uses transclude which will create a child scope to the…