多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
### Optional Optional&lt;T&gt;类(java.util.Optional)是一个容器类,代表一个值存在或不存在; * isPresent\(\)将在Optional包含值的时候返回true, 否则返回false; * ifPresent\(Consumer&lt;T&gt; block\)会在值存在的时候执行给定的代码块; * get\(\)会在值存在时返回值,否则抛出一个NoSuchElement异常; * orElse\(T other\)会在值存在时返回值,否则返回一个默认值; ### 常用API * empty\(\):返回一个空的Optional实例 * filter\(\):如果值存在并且满足提供的谓词,就返回包含该值的Optional对象;否则返回一个空的Optional对象 * flatMap\(\):如果值存在,就对该值执行提供的mapping函数调用,返回一个Optional类型的值,否则就返回一个空的Optional对象 * isPresent\(\):如果值存在就返回true,否则返回false * map\(\):如果值存在,就对该值执行提供的mapping函数调用 * get\(\)是这些方法中最简单但又最不安全的方法。如果变量存在,它直接返回封装的变量值,否则就抛出一个NoSuchElementException异常。所以,除非你非常确定Optional变量一定包含值,否则使用这个方法是个相当糟糕的主意。此外,这种方式即便相对于嵌套式的null检查,也并未体现出多大的改进; * orElse\(Tother\)是我们在代码清单10-5中使用的方法,正如之前提到的,它允许你在Optional对象不包含值时提供一个默认值; * orElseGet\(Supplier&lt;?extendsT&gt;other\)是orElse方法的延迟调用版,Supplier方法只有在Optional对象不含值时才执行调用。 * orElseThrow\(Supplier&lt;?extendsX&gt;exceptionSupplier\)和get方法非常类似,它们遭遇Optional对象为空时都会抛出一个异常,但是使用orElseThrow你可以定制希望抛出的异常类型 * ifPresent\(Consumer&lt;?superT&gt;\)让你能在变量值存在时执行一个作为参数传入的方法,否则就不进行任何操作 ``` Optional<Car> optCar = Optional.empty(); Optional<Car> optCar = Optional.of(car); // 如果car是一个null,这段代码会立即抛出一个NullPointerException Optional<Car> optCar = Optional.ofNullable(car); ```