加入收藏 | 设为首页 | 会员中心 | 我要投稿 鹰潭站长网 (https://www.0701zz.cn/)- 图像处理、低代码、云通信、数据工具、物联设备!
当前位置: 首页 > 站长资讯 > 动态 > 正文

Java中如何优雅

发布时间:2020-10-10 05:22:01 所属栏目:动态 来源:未知
导读:NR Null Object是一款适用于Android Studio、IntelliJ IDEA、PhpStorm、WebStorm、PyCharm、RubyMine、AppCode、CLion、GoLand、DataGrip等IDEA的Intellij插件。其可以根据现有对象,便捷快速生成其空对象模式需要的组成成分,其包含功能如下: 分析所选类可

NR Null Object是一款适用于Android Studio、IntelliJ IDEA、PhpStorm、WebStorm、PyCharm、RubyMine、AppCode、CLion、GoLand、DataGrip等IDEA的Intellij插件。其可以根据现有对象,便捷快速生成其空对象模式需要的组成成分,其包含功能如下:

  1.  分析所选类可声明为接口的方法;
  2.  抽象出公有接口;
  3.  创建空对象,自动实现公有接口;
  4.  对部分函数进行可为空声明;
  5.  可追加函数进行再次生成;
  6.  自动的函数命名规范

微服务的出现,确实推动技术向前演进了一大步,但是微服务并不是万能的,在使用它的同时,必然要承担它的复杂性所带来的成本。不过微服务确实是良药,有了云原生技术出现后,对于该良药所带来的副作用便能消解很多,云原生必定是企业落地微服务的优秀伴侣

Optional

还有一种方式是使用Java8特性中的Optional来进行优雅地判空,Optional来自官方的介绍如下:

A container object which may or may not contain a non-null value. If a value is present, isPresent() will return true and get() will return the value.

一个可能包含也可能不包含非null值的容器对象。如果存在值,isPresent()将返回true,get()将返回该值。

话不多说,举个例子。

有如下代码,需要获得Test2中的Info信息,但是参数为Test4,我们要一层层的申请,每一层都获得的对象都可能是空,最后的代码看起来就像这样。


	
  1. public String testSimple(Test4 test) { 
  2.        if (test == null) {  
  3.           return "";  
  4.       }  
  5.       if (test.getTest3() == null) {  
  6.           return "";  
  7.       }  
  8.       if (test.getTest3().getTest2() == null) {  
  9.           return "";  
  10.       }  
  11.       if (test.getTest3().getTest2().getInfo() == null) {  
  12.           return "";  
  13.       }  
  14.       return test.getTest3().getTest2().getInfo(); 
  15.    } 

但是使用Optional后,整个就都不一样了。 


	
  1. public String testOptional(Test test) {  
  2.        return Optional.ofNullable(test).flatMap(Test::getTest3)  
  3.                .flatMap(Test3::getTest2)  
  4.                .map(Test2::getInfo)  
  5.                .orElse("");  
  6.    } 

1、Optional.ofNullable(test),如果test为空,则返回一个单例空Optional对象,如果非空则返回一个Optional包装对象,Optional将test包装;


	
  1. public static <T> Optional<T> ofNullable(T value) {  
  2.      return value == null ? empty() : of(value);  
  3.  } 

2、flatMap(Test::getTest3)判断test是否为空,如果为空,继续返回第一步中的单例Optional对象,否则调用Test的getTest3方法;


	
  1. public<U> Optional<U> flatMap(Function<? super T, Optional<U>> mapper) {  
  2.       Objects.requireNonNull(mapper);  
  3.       if (!isPresent())  
  4.           return empty();  
  5.       else {  
  6.           return Objects.requireNonNull(mapper.apply(value));  
  7.       }  
  8.   } 

3、flatMap(Test3::getTest2)同上调用Test3的getTest2方法;

4、map(Test2::getInfo)同flatMap类似,但是flatMap要求Test3::getTest2返回值为Optional类型,而map不需要,flatMap不会多层包装,map返回会再次包装Optional


(编辑:鹰潭站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读