guava 学习笔记 使用瓜娃(guava)的选择和预判断使代码变得简洁

1,本文翻译自 http://eclipsesource.com/blogs/2012/06/06/cleaner-code-with-guava-optionals-and-preconditions/,有说的不对的地方,欢迎斧正。

2,我开发软件的时候,朝着干净代码发展是我的特权,有一段时间,我曾在我几乎所有的项目中使用谷歌瓜娃(Google Guava),理由很简单,guava为我编写漂亮代码提供了很大的便利,今天,我想向你展示下我是怎么使用预判断来避免不必要的if/throw 申明,使用选择来提升代码逻辑性。

  预判断并不是新东西,Apache Commons项目有类似的功能,但是并没有瓜娃提供的解决方案简洁,预判断用来验证方法的参数,状态等等,当条件判断结果是false,预判断就会抛出预想的异常,预想的意味着以下情形,当检查状态的时候,你可以使用Preconditions.checkState( 条件 ),如果条件判断的结果是false,将会抛出非法状态异常,同样,另外一种预判断checkArgument会抛出非法参数异常,当然,使用预判断你唯一需要明确的时候就是使用静态导入,让我们来看一个例子。

  给出的是一个方法,接受list作为参数,当这个方法被调用的时候,我们需要检查list是不是null和是不是空,一般的java解决方案如下所示:

public void doSomething( List<Object> list ) {
if( list == null ) {
throw new IllegalArgumentException( "List must not be null" );
}
if( list.isEmpty() ) {
throw new IllegalArgumentException( "List must not be empty" );
}
doSomethingMore( list );
}

  当使用guava的预判断,代码的数量明显减少,解决方案如下所示.

public void doSomething( List<Object> list ) {
checkArgument( list != null, "List must not be null" );
checkArgument( !list.isEmpty(), "List must not be empty" );
doSomethingMore( list );
}

  这肯定是一个提升,但是,当这个方法结合瓜娃的选择变得真正的性感,选择是一个概念,被设计来避免病态的null概念(阅读这里理解我为神马叫她“病态”),这里明显有一个对象容器来避免空引用,例如,null 大部分时间用来检查一个对象是不是存在,如果不存在,一个空指针异常发生了,结果如以下代码所示:

public void doSomething() {
if( this.field == null ) {
throw new IllegalStateException( "Field is not initialized" );
}
doSomethingMore();
}

  与其保存这个对象直接放到field,我经常使用选择.这避免了我代码中的空指针异常并且显得更合语法,上面这个例子结合选择变成了如下所示:

public void doSomething() {
checkState( field.isPresent(), "Argument is not initialied" );
doSomethingMore();
}

最后,由你决定这个代码是不是更好更简洁,通过使用预判断和选择.从我的观点来看,这么写更具有可读性,我期待在评论中听到你的观点 .

no pays,no gains!
	</div>
<div class="postDesc">posted @ <span id="post-date">2013-02-05 16:15</span> <a href="http://www.cnblogs.com/snidget/">carter.li</a> 阅读(<span id="post_view_count">6232</span>) 评论(<span id="post_comment_count">1</span>) <a href="https://i.cnblogs.com/EditPosts.aspx?postid=2893112" rel="nofollow">编辑</a> <a href="#" onclick="AddToWz(2893112);return false;">收藏</a></div>
</div>
posted @
2016-12-24 00:35 
jobs-lgy 
阅读(...) 
评论(...) 
编辑 
收藏

guava 学习笔记 使用瓜娃(guava)的选择和预判断使代码变得简洁的更多相关文章

  1. Guava学习笔记:Google Guava 类库简介

    http://www.cnblogs.com/peida/tag/Guava/ Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, cachin ...

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

    guava 学习笔记(二) 瓜娃(guava)的API快速熟悉使用 1,大纲 让我们来熟悉瓜娃,并体验下它的一些API,分成如下几个部分: Introduction Guava Collection ...

  3. Guava学习笔记目录

    Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency libra ...

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

    1,大纲 让我们来熟悉瓜娃,并体验下它的一些API,分成如下几个部分: Introduction Guava Collection API Guava Basic Utilities IO API C ...

  5. Guava学习笔记(一)概览

    Guava是谷歌开源的一套Java开发类库,以简洁的编程风格著称,提供了很多实用的工具类, 在之前的工作中应用过Collections API和Guava提供的Cache,不过对Guava没有一个系统 ...

  6. Guava学习笔记(2):Preconditions优雅的检验参数

    转自:http://www.cnblogs.com/peida/p/Guava_Preconditions.html 在日常开发中,我们经常会对方法的输入参数做一些数据格式上的验证,以便保证方法能够按 ...

  7. Guava学习笔记:Preconditions优雅的检验参数

    在日常开发中,我们经常会对方法的输入参数做一些数据格式上的验证,以便保证方法能够按照正常流程执行下去.对于可预知的一些数据上的错误,我们一定要做事前检测和判断,来避免程序流程出错,而不是完全通过错误处 ...

  8. Guava学习笔记:Preconditions优雅的检验参数(java)

    http://www.cnblogs.com/peida/p/guava_preconditions.html 在日常开发中,我们经常会对方法的输入参数做一些数据格式上的验证,以便保证方法能够按照正常 ...

  9. Entity Framework 6 学习笔记2 — 增、删、改、显示简单代码示例

    前言 通过 “Entity Framework 6 学习笔记1 — 介绍和安装方法”文章我相信大家对EF的安装应该没什么问题了,整体安装还是比较简单的,只需要通过Nuge搜索EF然后安装就可以了,这也 ...

随机推荐

  1. ABAP--在查询条件只包含部分索引字段时,如何使用索引

    One of the most important considerations when writing a select statement against a large table is th ...

  2. 在内网中OWA第一次访问速度慢的问题

      当网络环境为内网时,有时访问OWA站点一直卡在Office Web App 那里. 这是因为SharePoint有一个证书需要联网检索 此环境为SharePoint 2013 通过下面的三个步骤 ...

  3. Telerik JustDecompile 2014.1.255.0 开发版(.NET反编译神器,免费下载)

    Telerik JustDecompile是Telerik公司推出一个免费的.NET反编译工具,支持插件与Visual Studio 2015~2013集成,还能够创建Visual Studio Pr ...

  4. SharePoint 2013 操作文档库ECB菜单

    在SharePoint的使用中,我们经常需要定制SharePoint的一系列菜单,这里就包括ECB菜单,下面,我们简单了解一下ECB菜单如何定制,以及原理. 1.正常情况文档库的ECB菜单如下图: 2 ...

  5. SQLMAP使用笔记

    -u #注入点-f #指纹判别数据库类型-b #获取数据库版本信息-p #指定可测试的参数(?page=1&id=2 -p “page,id”)-D “” #指定数据库名-T “” #指定表名 ...

  6. Android 隐式意图的配置

    本文地址:http://www.cnblogs.com/wuyudong/p/5677473.html,转载请注明源地址. <Android 显示意图激活另外一个Actitity>一文介绍 ...

  7. 【代码笔记】iOS-判断有无网络

    一,工程图. 二,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController : UIVi ...

  8. 【读书笔记】iOS-iCloud编程

    一,苹果云服务-iCloud. 苹果公司斥资10亿美元在北卡罗来纳州简历数所中心-iDataCenter,该数据中心面积为50万平方英尺,也是美国最大规模的数据中心之一. 二,配置iCloud. 1, ...

  9. iOS开发之多线程技术——NSOperation篇

    本篇将从四个方面对iOS开发中使用到的NSOperation技术进行讲解: 一.什么是NSOperation 二.我们为什么使用NSOperation 三.在实际开发中如何使用NSOperation ...

  10. location of the android sdk has not been setup in the preferences

    点eclipse的android virtual device manager提示错误:error:location of the android sdk has not been setup in ...