`

Guava Optional<T> 关于null

阅读更多

   对于Java中null的缺点和如何处理,大家讨论了很多遍,guava给出的解决方法是Optional<T>

 

    public static Optional<String> getYourName () {
        return Optional.of("malone");
    }

    public static void main (String[] args) {
        Optional<String> result = getYourName();
        if (!result.isPresent()) {
            throw new RuntimeException("错误的返回结果!");
        }
        System.out.println(result.get());

        Optional<String> newResult = result.or(Optional.of("hi"));
        System.out.println(newResult.get());
    }

   Optional<T> 基本用法如上,具体的可以参考api,当你的返回返回单个对象时,最好使用Optional<T>,这样的代码更容易让你想起去做非空校验;Optional<T>不会缩减你的代码量,只是当返回值为null的时候,给你提供一个更有意义的null,降低null在系统中引起的bug

 

这里是一个更高级的用法http://www.blogbus.com/logs/235334714.html,扩展了Option<T>,扩展成了一种Fluent风格的代码,代码量不会减少,而且有可能变多,不过使代码更优雅,不过这种东西和设计模式差不多,可以帮你加深理解Optional和Fluent风格的代码,但实际应用中很少会做这种扩展

分享到:
评论

相关推荐

    maven-shade-plugin-3.1.0.jar

    &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt; &lt;artifactId&gt;maven-shade-plugin&lt;/artifactId&gt; &lt;version&gt;3.1.0&lt;/version&gt; &lt;executions&gt; &lt;execution&gt; &lt;phase&gt;package&lt;/phase&gt; &lt;goals&gt; &lt;goal&gt;shade&lt;/goal&gt; &lt;/...

    基于Guava的事件总线Otto.zip

     &lt;artifactId&gt;otto&lt;/artifactId&gt;  &lt;version&gt;(insert latest version)&lt;/version&gt; &lt;/dependency&gt;用法:Bus bus = new Bus();发布:bus.post(new AnswerAvailableEvent(42)); 标签:Otto

    Java的包扫描实现和Jar应用.docx

    jar包的扫描方式,在我们的项目中一般都会去依赖一些其他jar 包, 比如添加 guava 依赖 ... &lt;artifactId&gt;guava&lt;/artifactId&gt; &lt;version&gt;28.2-jre&lt;/version&gt; &lt;/dependency&gt; 我们再次运行的测试用例

    modernizer-maven-plugin:检测旧版Java API的使用

    现代化Maven插件 Modernizer Maven插件可以检测对旧版API的使用,这些旧版API可以替代现代Java版本。 这些现代的API通常比传统的API具有更高的性能,安全性和惯用性... &lt; groupId&gt;org.gaul&lt;/ groupId&gt; &lt; artifactId&gt;

    guava-r06.jar中文文档.zip

    &lt;artifactId&gt;guava&lt;/artifactId&gt; &lt;version&gt;***&lt;/version&gt; &lt;/dependency&gt; ``` # Gradle依赖: ``` Gradle: implementation group: 'com.google.guava', name: 'guava', version: '***' Gradle (Short): ...

    guava-r03.jar中文文档.zip

    &lt;artifactId&gt;guava&lt;/artifactId&gt; &lt;version&gt;***&lt;/version&gt; &lt;/dependency&gt; ``` # Gradle依赖: ``` Gradle: implementation group: 'com.google.guava', name: 'guava', version: '***' Gradle (Short): ...

    guava-r05.jar中文文档.zip

    &lt;artifactId&gt;guava&lt;/artifactId&gt; &lt;version&gt;***&lt;/version&gt; &lt;/dependency&gt; ``` # Gradle依赖: ``` Gradle: implementation group: 'com.google.guava', name: 'guava', version: '***' Gradle (Short): ...

    guava-r08.jar中文文档.zip

    &lt;artifactId&gt;guava&lt;/artifactId&gt; &lt;version&gt;***&lt;/version&gt; &lt;/dependency&gt; ``` # Gradle依赖: ``` Gradle: implementation group: 'com.google.guava', name: 'guava', version: '***' Gradle (Short): ...

    guava-r07.jar中文文档.zip

    &lt;artifactId&gt;guava&lt;/artifactId&gt; &lt;version&gt;***&lt;/version&gt; &lt;/dependency&gt; ``` # Gradle依赖: ``` Gradle: implementation group: 'com.google.guava', name: 'guava', version: '***' Gradle (Short): ...

    guava-r09.jar中文文档.zip

    &lt;artifactId&gt;guava&lt;/artifactId&gt; &lt;version&gt;***&lt;/version&gt; &lt;/dependency&gt; ``` # Gradle依赖: ``` Gradle: implementation group: 'com.google.guava', name: 'guava', version: '***' Gradle (Short): ...

    java8看不到源码-java-extended:(未维护)流行Java库的扩展

    &lt;groupId&gt;com.bluecatcode.guava&lt;/groupId&gt; &lt;artifactId&gt;guava-19.0-extended&lt;/artifactId&gt; &lt;version&gt;1.1.0&lt;/version&gt; &lt;/dependency&gt; 任何一个 Either表示两种可能类型之一的值,很像Optional但两种类型都可以定义。...

    guava-r06.jar中文-英文对照文档.zip

    &lt;artifactId&gt;guava&lt;/artifactId&gt; &lt;version&gt;***&lt;/version&gt; &lt;/dependency&gt; ``` # Gradle依赖: ``` Gradle: implementation group: 'com.google.guava', name: 'guava', version: '***' Gradle (Short): ...

    guava-r05.jar中文-英文对照文档.zip

    &lt;artifactId&gt;guava&lt;/artifactId&gt; &lt;version&gt;***&lt;/version&gt; &lt;/dependency&gt; ``` # Gradle依赖: ``` Gradle: implementation group: 'com.google.guava', name: 'guava', version: '***' Gradle (Short): ...

    guava-r08.jar中文-英文对照文档.zip

    &lt;artifactId&gt;guava&lt;/artifactId&gt; &lt;version&gt;***&lt;/version&gt; &lt;/dependency&gt; ``` # Gradle依赖: ``` Gradle: implementation group: 'com.google.guava', name: 'guava', version: '***' Gradle (Short): ...

    guava-r03.jar中文-英文对照文档.zip

    &lt;artifactId&gt;guava&lt;/artifactId&gt; &lt;version&gt;***&lt;/version&gt; &lt;/dependency&gt; ``` # Gradle依赖: ``` Gradle: implementation group: 'com.google.guava', name: 'guava', version: '***' Gradle (Short): ...

    guava-r07.jar中文-英文对照文档.zip

    &lt;artifactId&gt;guava&lt;/artifactId&gt; &lt;version&gt;***&lt;/version&gt; &lt;/dependency&gt; ``` # Gradle依赖: ``` Gradle: implementation group: 'com.google.guava', name: 'guava', version: '***' Gradle (Short): ...

    guava-r09.jar中文-英文对照文档.zip

    &lt;artifactId&gt;guava&lt;/artifactId&gt; &lt;version&gt;***&lt;/version&gt; &lt;/dependency&gt; ``` # Gradle依赖: ``` Gradle: implementation group: 'com.google.guava', name: 'guava', version: '***' Gradle (Short): ...

    javabitset源码-redis-bloomfilter:基于Redis的BloomfilterforJava

    &lt;id&gt;jitpack.io&lt;/id&gt; &lt;url&gt;https://jitpack.io&lt;/url&gt; &lt;/repository&gt; &lt;/repositories&gt; 添加redis-bloomFilter依赖 &lt;dependency&gt; &lt;groupId&gt;com.github.ttting&lt;/groupId&gt; &lt;artifactId&gt;redis-bloomfilter&lt;/...

    fact-bus:基于guava整合spring实现EventBus;具体详情请访问:https

    fact-bus当前版本1.0.0-SNAPSHOTMaven依赖&lt;dependency&gt;&lt;groupId&gt;com.woter.fact&lt;/groupId&gt;&lt;artifactId&gt;fact-bus&lt;/artifactId&gt;&lt;version&gt;1.0.0-SNAPSHOT&lt;/version&gt;&lt;/dependency&gt;功能描述fact-bus 是基于guava整合...

    java8源码-onlyTest:只有测试

    &lt;artifactId&gt;spring-boot-starter-parent&lt;/artifactId&gt; &lt;version&gt;2.0.0.RELEASE&lt;/version&gt; &lt;relativePath&gt; &lt;!-- lookup parent from repository --&gt; &lt;/parent&gt; junit4不需要直接引用,直接引用spring-boot-...

Global site tag (gtag.js) - Google Analytics