博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Guava-Optional(译)
阅读量:6762 次
发布时间:2019-06-26

本文共 3591 字,大约阅读时间需要 11 分钟。

Guava Optional Class

Optional 是一个不可变对象,用来包含一个非null对象。Optional使用absent来表达null值。该类提供了很多实用的方法来处理值是否可用,从而避免对null值进行检查。

类的声明

以下是com.google.common.base.Optional<T> 类的声明:

@GwtCompatible(serializable=true)public abstract class Optional
extends Object implements Serializable

类的方法

方法和描述

  1. static <T> Optional<T> absent()

    创建一个引用缺失的Optional实例。
  2. abstract Set<T> asSet()

    返回一个不可变的单例的set集合,如果引用存在,则返回一个只包含一个元素的set集合,否则,返回一个空的不可变set集合。
  3. abstract boolean equals(Object object)

    该equals对象属于Optional类的方法,比较的规则如下:1.若给予的对象不是Optional及其子类,直接返回false2.给予的对象是Optional及其子类,则比较改optional中所包含的引用的值。
  4. static <T> Optional<T> fromNullable(T nullableReference)

    创建一个指定引用的Optional,若引用为null则表示引用缺失,并返回一个absent()①。
  5. abstract T get()

    返回包含的实例,该实例必须存在,如果不存在将会抛出java.lang.IllegalStateException异常。
  6. abstract int hashCode()

    返回该实例的哈希码。
  7. abstract boolean isPresent()

    如果Optional包含非null引用实例则返回true。
  8. static <T> Optional<T> of(T reference)

    创建一个指定引用的Optional实例,若引用为null则快速失败。
  9. abstract Optional<T> or(Optional<? extends T> secondChoice)

    Returns this Optional if it has a value present; secondChoice otherwise.
  10. abstract T or(Supplier<? extends T> supplier)

    Returns the contained instance if it is present; supplier.get() otherwise.
  11. abstract T or(T defaultValue)

    如果包含的实例存在,则返回,如果不存在则返回给予的默认值。
  12. abstract T orNull()

    如果包含的实例存在则返回该实例,如果不存在则返回null。
  13. static <T> Iterable<T> presentInstances(Iterable<? extends Optional<? extends T>>optionals)

    Returns the value of each present instance from the supplied optionals,in order, skipping over occurrences of absent().
  14. abstract String toString()

    返回实例的字符串表示,默认实现只有两种表示方法若Optional中包含的引用缺失则返回optional.absent()否则返回optional.of(引用的值)
  15. abstract <V> Optional<V> transform(Function<? super T,V> function)

    If the instance is present, it is transformed with the given Function; otherwise, absent() is returned.

方法继承

该类所继承的方法来自类Object:

java.lang.Object

Optional 类实例

使用任何编辑器创建一下程序:

GuavaTester.java

import com.google.common.base.Optional;public class GuavaTester {   public static void main(String args[]) {      GuavaTester guavaTester = new GuavaTester();      Integer value1 =  null;      Integer value2 =  new Integer(10);            //Optional.fromNullable - allows passed parameter to be null.      Optional
a = Optional.fromNullable(value1); //Optional.of - throws NullPointerException if passed parameter is null Optional
b = Optional.of(value2); System.out.println(guavaTester.sum(a,b)); } public Integer sum(Optional
a, Optional
b) { //Optional.isPresent - checks the value is present or not System.out.println("First parameter is present: " + a.isPresent()); System.out.println("Second parameter is present: " + b.isPresent()); //Optional.or - returns the value if present otherwise returns //the default value passed. Integer value1 = a.or(new Integer(0)); //Optional.get - gets the value, value should be present Integer value2 = b.get(); return value1 + value2; } }

校验结果

在控制台使用 javac 命令编译,编译结果如下:

C:\Guava>javac GuavaTester.javaNow run the GuavaTester to see the result.C:\Guava>java GuavaTesterSee the result.
First parameter is present: falseSecond parameter is present: true10

注①:请看一下来自Guava的部分代码

public static Optional fromNullable(Object nullableReference){    return ((Optional) (nullableReference != null ? new Present(nullableReference) : absent()));}

抽象类Optional只有两个实现类Present和absent,这两个类分别表示存在以及缺失状态。调用fromNullable方法

并且指定的引用为null的时候,会调用absent方法,来生成Optional对象,实际上与Optional.absent()一致。

说明:有三个方法没有作解释,主要是担心相关知识不理解,容易做出错误的翻译,望请谅解!

转载地址:http://nebeo.baihongyu.com/

你可能感兴趣的文章
【redis使用全解析】常见运维操作
查看>>
hdu2377Bus Pass(构建更复杂的图+spfa)
查看>>
2015第29周三
查看>>
CCBValue
查看>>
C#一些知识点:委托和事件的区别
查看>>
linux修改挂载目录
查看>>
Cocos2d-js-v3.2 在 mac 上配置环境以及编译到 Andorid 的注意事项(转)
查看>>
android开源项目学习
查看>>
提升Mac os x 10.10+xcode6.1之后,Cocoapods发生故障的解决方案
查看>>
Developer Tool - 1. Text Tool and GNU/Linux Tool
查看>>
OAuth 2.0 安全案例回顾
查看>>
标准API使用小技巧
查看>>
jQuery Validate插入 reomte使用详细的说明
查看>>
科普:揭秘手机软件自启原理
查看>>
lintcode :搜索二维矩阵
查看>>
前端设计js+Tab切换可关闭+添加并自动判断是否已打开自动切换当前状态(转载)...
查看>>
for循环,如何结束多层for循环
查看>>
段树 基于单点更新 敌人阵容
查看>>
java中取得上下文路径的方法
查看>>
Tomcat通过配置一个虚拟路径管理web工程
查看>>