资讯专栏INFORMATION COLUMN

Guava-Optional(译)

nifhlheimr / 1664人阅读

摘要:创建一个指定引用的,若引用为则表示引用缺失,并返回一个。返回包含的实例,该实例必须存在,如果不存在将会抛出异常。说明有三个方法没有作解释,主要是担心相关知识不理解,容易做出错误的翻译,望请谅解

原文地址
译者

Guava Optional Class

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

类的声明

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

@GwtCompatible(serializable=true)
public abstract class Optional
   extends Object
      implements Serializable
类的方法 方法和描述

static Optional absent()

创建一个引用缺失的Optional实例。

abstract Set asSet()

返回一个不可变的单例的set集合,如果引用存在,则返回一个只包含一个元素的set集合,否则,返回一个空的不可变set集合。

abstract boolean equals(Object object)

该equals对象属于Optional类的方法,比较的规则如下:
1.若给予的对象不是Optional及其子类,直接返回false
2.给予的对象是Optional及其子类,则比较改optional中所包含的引用的值。

static Optional fromNullable(T nullableReference)

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

abstract T get()

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

abstract int hashCode()

返回该实例的哈希码。

abstract boolean isPresent()

如果Optional包含非null引用实例则返回true。

static Optional of(T reference)

创建一个指定引用的Optional实例,若引用为null则快速失败。

abstract Optional or(Optional secondChoice)

Returns this Optional if it has a value present; secondChoice otherwise.

abstract T or(Supplier supplier)

Returns the contained instance if it is present; supplier.get() otherwise.

abstract T or(T defaultValue)

如果包含的实例存在,则返回,如果不存在则返回给予的默认值。

abstract T orNull()

如果包含的实例存在则返回该实例,如果不存在则返回null。

static Iterable presentInstances(Iterable>optionals)

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

abstract String toString()

返回实例的字符串表示,默认实现只有两种表示方法若Optional中包含的引用缺失则返回optional.absent()否则返回optional.of(引用的值)

abstract Optional transform(Function 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.java
Now run the GuavaTester to see the result.

C:Guava>java GuavaTester
See the result.
First parameter is present: false
Second parameter is present: true
10

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

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

抽象类Optional只有两个实现类Present和absent,这两个类分别表示存在以及缺失状态。调用fromNullable方法
并且指定的引用为null的时候,会调用absent方法,来生成Optional对象,实际上与Optional.absent()一致。

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/65221.html

相关文章

  • 那些年,我的前端/Java后端书单

    摘要:全文为这些年,我曾阅读深入理解过或正在阅读学习即将阅读的一些优秀经典前端后端书籍。当然,如果您喜欢这篇文章,可以动手点点赞或者收藏。 全文为这些年,我曾阅读、深入理解过(或正在阅读学习、即将阅读)的一些优秀经典前端/Java后端书籍。全文为纯原创,且将持续更新,未经许可,不得进行转载。当然,如果您喜欢这篇文章,可以动手点点赞或者收藏。 基础 基础书籍 进阶 进阶阶段,深入学习的书...

    fxp 评论0 收藏0
  • 那些年,我的前端/Java后端书单

    摘要:全文为这些年,我曾阅读深入理解过或正在阅读学习即将阅读的一些优秀经典前端后端书籍。当然,如果您喜欢这篇文章,可以动手点点赞或者收藏。 全文为这些年,我曾阅读、深入理解过(或正在阅读学习、即将阅读)的一些优秀经典前端/Java后端书籍。全文为纯原创,且将持续更新,未经许可,不得进行转载。当然,如果您喜欢这篇文章,可以动手点点赞或者收藏。 基础 基础书籍 进阶 进阶阶段,深入学习的书...

    Tecode 评论0 收藏0
  • 那些年,我的前端/Java后端书单

    摘要:全文为这些年,我曾阅读深入理解过或正在阅读学习即将阅读的一些优秀经典前端后端书籍。当然,如果您喜欢这篇文章,可以动手点点赞或者收藏。 全文为这些年,我曾阅读、深入理解过(或正在阅读学习、即将阅读)的一些优秀经典前端/Java后端书籍。全文为纯原创,且将持续更新,未经许可,不得进行转载。当然,如果您喜欢这篇文章,可以动手点点赞或者收藏。 基础 基础书籍 进阶 进阶阶段,深入学习的书...

    VPointer 评论0 收藏0
  • 那些年,我的前端/Java后端书单

    摘要:全文为这些年,我曾阅读深入理解过或正在阅读学习即将阅读的一些优秀经典前端后端书籍。当然,如果您喜欢这篇文章,可以动手点点赞或者收藏。 全文为这些年,我曾阅读、深入理解过(或正在阅读学习、即将阅读)的一些优秀经典前端/Java后端书籍。全文为纯原创,且将持续更新,未经许可,不得进行转载。当然,如果您喜欢这篇文章,可以动手点点赞或者收藏。 基础 基础书籍 进阶 进阶阶段,深入学习的书...

    idealcn 评论0 收藏0
  • [][Tkinter 教程14] menu 菜单

    摘要:已获原作者授权原系列地址简介一提到这个词很多人首先想到的是餐馆里的菜单虽然餐馆菜单和计算机程序中的菜单看起来一点也不像但他们确实有很多共同点在餐馆中菜单列举了所有菜品和饮料在计算机程序中菜单通过图形界面展示了应用程序可用的命令和功能在用户界 已获原作者授权. 原系列地址: Python Tkinter 简介 一提到menu这个词, 很多人首先想到的是餐馆里的菜单. 虽然餐馆菜单和计算...

    joyqi 评论0 收藏0

发表评论

0条评论

nifhlheimr

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<