Guava Optional 的应用

今天老板让普通青年和文艺青年分别写一段SayHello的代码,要求如下,当用户名为null时则称呼“火星人”

不一会普通青年和文艺青年提交了代码。

普通青年的代码:

public void 普通青年_sayHello(String name){
	if(name==null){
	    name = "火星人";
	}
	System.out.println("普通青年说:Hello, "+name);
}

文艺青年的代码:

import com.google.common.base.Optional;

public void 文艺青年_sayHello(String name){
	name = Optional.fromNullable(name).or("火星人");
	System.out.println("文艺青年说:Hello, "+name);
}

文艺青年的代码和普通青年的作用是一模一样的。但是看上去貌似要更风骚一点。

我们JAVA代码中出现的最多的异常是什么,绝对是NullPointException,没有之一。因为对于Null的处理实在是太容易被忽略了。

在Guava中Optional类就是用来强制提醒青年们,注意对Null的判断。

Optional的另外几个方法

Optional<T>.of(T) 为Optional赋值,当T为Null直接抛NullPointException,建议这个方法在调用的时候直接传常量,不要传变量
Optional<T>.fromNullable(T) 为Optional赋值,当T为Null则使用默认值。建议与or方法一起用,风骚无比
Optional<T>.absent() 为Optional赋值,采用默认值
T or(T) 当Optional的值为null时,使用or赋予的值返回。与fromNullable是一对好基友
T get() 当Optional的值为null时,抛出IllegalStateException,返回Optional的值
boolean isPresent() 如果Optional存在值,则返回True
T orNull() 当Optional的值为null时,则返回Null。否则返回Optional的值
Set<T> asSet() 将Optional中的值转为一个Set返回,当然只有一个值啦,或者为空,当值为null时。

提问:

System.out.println(Optional.of(1).of(2).of(3).asSet().size());

会打印什么?

回答:1

时间: 2024-10-14 10:16:21

Guava Optional 的应用的相关文章

Java8 Lambda表达式介绍 -- 写给Guava使用者

Guava Guava是Google公司开源的一个实用工具库,对Java类库进行了多方面的增强.比如说,对函数式编程的支持,新的集合类(Multimap等),Cache支持,等等.在Java8之前,Guava和Java之间的关系,可以表示成下面这幅图: 但是随着Java8的发布,Guava和Java的关系发生了一些改变.Guava提供的很多功能,被内置在了Java8里,如下图所示: 本文举了几个例子,用代码来说明原先需要借助Guava来实现的功能,如何用Java7或Java8实现. Joiner

还在重复写空指针检查代码?考虑使用 Optional 吧!

一.前言 如果要给 Java 所有异常弄个榜单,我会选择将 NullPointerException 放在榜首.这个异常潜伏在代码中,就像个遥控炸弹,不知道什么时候这个按钮会被突然按下(传入 null 对象). 还记得刚入行程序员的时候,三天两头碰到空指针异常引发的 Bug,解决完一个,又在另一处碰到.那时候师兄就教我,不要相信任何『对象』,特别是别人给你的,这些地方都加上判断.于是代码通常为会变成下面这样: if(obj!=null){ // do something } 有了这个防御之后,虽

Guava-Optional可空类型

接上篇Guava之Joiner和Splitter,本篇将介绍Guava的另外一个有用的对象Optional,这在Java中Google Guava首先给我们提出可空对象模型的.在其他语言如c#这是已经存在很久的模式,并包含在.net类库中Nullable(Int?也是一个可空类 型). Null sucks 回到本文主题Optional.在我日常编程中NullPointerException是肯定是大家遇见最多的异常错误: 为此Doug Lea曾说过: Null sucks. Sir C. A.

spring-data-jpa 中文文档(2)

spring-data-jpa 中文文档(2) JPA Repositories 简介 Spring命名空间 SpringData使用了自定义的命名空间去定义repository.通常我们会使用repositories元素: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns

Guava学习笔记:Optional优雅的使用null

在我们学习和使用Guava的Optional之前,我们需要来了解一下Java中null.因为,只有我们深入的了解了null的相关知识,我们才能更加深入体会领悟到Guava的Optional设计和使用上的优雅和简单.  null代表不确定的对象: Java中,null是一个关键字,用来标识一个不确定的对象.因此可以将null赋给引用类型变量,但不可以将null赋给基本类型变量. Java中,变量的使用都遵循一个原则:先定义,并且初始化后,才可以使用.例如如下代码中,我们不能定义int age后,不

Guava源码分析——Optional

Google的Guava库的出现,使Java代码的书写更加流畅,无论是从效率还是代码风格上,Guava都必将成为一种趋势(Java8明显可以看出,大多数的功能开始借鉴Guava),今天开始,PoNa就以自己微薄的水平试着分析一下Guava的源码,借此使自己更上一层楼,还请各位多多扔砖. Guava文档中,第一篇就提到的尽量避免使用Null,会给代码带来一些负面影响,并举出map.get(key) == null,带来的混淆.由此.Guava提出了Optional的概念. 如图所示,Guava的O

Guava:好用的java类库 学习小记

基础功能 google guava中定义的String操作 在google guava中为字符串操作提供了很大的便利,有老牌的判断字符串是否为空字符串或者为null,用指定字符填充字符串,以及拆分合并字符串,字符串匹配的判断等等. 1. 使用com.google.common.base.Strings类的isNullOrEmpty(input)方法判断字符串是否为空 1 //Strings.isNullOrEmpty(input) demo 2 String input = ""; 3

学习笔记(二) 瓜娃(guava)的API快速熟悉使用

1,大纲 让我们来熟悉瓜娃,并体验下它的一些API,分成如下几个部分: Introduction Guava Collection API Guava Basic Utilities IO API Cache API 2,为神马选择瓜娃? 瓜娃是java API蛋糕上的冰激凌(精华) 高效设计良好的API. 被google的开发者设计,实现和使用. 遵循高效的java这本书的好的语法实践. 使代码更刻度,简洁,简单. 使用java 1.5的特性, 流行的API,动态的开发 它提供了大量相关的应用

guava 学习

1,本文翻译自 http://eclipsesource.com/blogs/2012/06/06/cleaner-code-with-guava-optionals-and-preconditions/,有说的不对的地方,欢迎斧正. 2,我开发软件的时候,朝着干净代码发展是我的特权,有一段时间,我曾在我几乎所有的项目中使用谷歌瓜娃(Google Guava),理由很简单,guava为我编写漂亮代码提供了很大的便利,今天,我想向你展示下我是怎么使用预判断来避免不必要的if/throw 申明,使用