Google Guava 学习记录《一》

Guava 在Google code 上地址:https://code.google.com/p/guava-libraries/

首先为什么要学习这个库,在实习的时候看大神的代码很简洁,很多地方将一些琐碎凌乱的代码轻松解决,所以抱着试试看的心态搞搞吧。

第一部分:basic utilities

  1. null 问题的处理

理解Optional<T> ,首先要理解为什么出现这个。在Java中null其实代表的意思在不同的content下是不同的,比如一个值可能是null或者是真的不存在。在Map.get时会return null 如果这个key的value没有找到或者也有可能是这个key不存在。"It‘s very easy to mix up the cases where a Map contains an entry for a key, with value null, and the case where the Map has no entry for a key"  这句话说的这个意思。而Optional出现就是为了让这个null清晰

上自己的测试代码,不是官方的。

package google.guava;

import com.google.common.base.*;

/**
 * Created by xiaoxin on 15-8-11.
 */
public class GuavaDemo {

    Optional<String> userName;

    public static void main(String []args){
        GuavaDemo gd = new GuavaDemo();

        String userNameFromReuqest = "userNameTest";

        gd.userName = Optional.of(userNameFromReuqest);

        gd.userName.isPresent();
        System.out.println(gd.userName.get());

        String nullUserName = null;

        gd.userName = Optional.fromNullable(nullUserName);
        System.out.println(gd.userName.isPresent());
    //利用Optional.fromNulllable(T)可以很好的处理一些可能为nulll的传值。
      /*  String userName = ..FromUnknowSourcce()
        gd.userName = Optional.fromNullable(userName);

        if (gd.userName.isPresent()){
            handle username
        }else{
            handle exception
        }*/
    }
}
 

non-null在Optional的理解就是 present,而null是absent,但不存在说我这个var里contain一个null。 即只有两种情况。

Optional的静态方法:

Optional.of(T) Make an Optional containing the given non-null value, or fail fast on null.
Optional.absent() Return an absent Optional of some type.
Optional.fromNullable(T) Turn the given possibly-null reference into an Optional, treating non-null as present and null as absent

查询方法:

boolean isPresent() Returns true if this Optional contains a non-null instance. //如果Optional里是non-null就是返回true
T get() Returns the contained T instance, which must be present; otherwise, throws an IllegalStateException. //返回必须是non-null,否则抛出exception
T or(T) Returns the present value in this Optional, or if there is none, returns the specified default.//返回value如果是是non-null,如果是none,就返回特定的默认值,这里的默认值是你穿进去的参数
T orNull() Returns the present value in this Optional, or if there is none, returns null. The inverse operation of fromNullable.
Set<T> asSet() Returns an immutable singleton Set containing the instance in this Optional, if there is one, or otherwise an empty immutable set.

其实很多的处理null的情况都是String,所以有Strings的静态方法:  方法名就一目了然了~ 后面还有个Strings的专门章节

emptyToNull(String)
isNullOrEmpty(String)
nullToEmpty(String)

后记:有很多办法可以解决传参null问题,比如刚看到的@Nonnull,应该就是要求参数为null。后续慢慢补充这个Optional,在项目中用后应该理解的能更好点

时间: 2024-10-26 00:59:11

Google Guava 学习记录《一》的相关文章

Google Guava 学习记录《二》 Precondition

1 int i = 4; 2 int j = 5; 3 Preconditions.checkArgument(i>j,"i should bigger than j, but i is %s and j is %s",i,j); Exception in thread "main" java.lang.IllegalArgumentException: i should bigger than j, but i is 4 and j is 5 at com.

Google Guava 学习记录《4》Immutable Set

Immutable objects have many advantages, including: Safe for use by untrusted libraries. Thread-safe: can be used by many threads with no risk of race conditions. Doesn't need to support mutation, and can make time and space savings with that assumpti

Google Guava 学习记录《Three》 Ordering

Ordering我看了好多遍中文文档,加一些实例终于算是搞清楚怎么回事了. 他是干什么的? 就像他名字一样,用来ordering 排序的.. 主要有两种方法. 1 用它的静态方法排序. 比如 Ordering.natural();    对可排序类型做自然排序,如数字按大小,日期按先后.  natual()的官方解释翻译. 2 用自己定义的Ordering 比如你要根据字符串的长度排序. public void orderBasedOnLength(){ Ordering<String> by

Google Guava学习笔记——简介

Google Guava是什么东西?首先要追溯到2007年的“Google Collections Library”项目,它提供对Java 集合操作的工具类.后来Guava被进化为Java程序员开发必备的工具.Guava可以对字符串,集合,并发,I/O,反射进行操作. 在软件开发过程中,我们自认为可以什么都能做,我们本能的去写自己的类库来处理一些日常的问题.当然,我们认为自己写的代码是坚不可摧的,并且是经过单元测试的.实际上,我们没有我们认为的那么聪明,换句话说,它不在于你有多聪明,而是在于编写

Google Guava学习笔记——基础工具类Preconditions类的使用

Preconditions类是一组静态方法用来验证我们代码的状态.Preconditons类很重要,它能保证我们的代码按照我们期望的执行,如果不是我们期望的,我们会立即得到反馈是哪里出来问题,现在我们使用Preconditions来保证我们代码的行为,并且对调试也非常方便. 当然,你也可以自己写预处理的代码,就像下面一样: if (someObj == null) { throw new IllegalArgumentException(" someObj must not be null&qu

[Google Guava]学习--新集合类型Multimap

每个有经验的Java程序员都在某处实现过Map<K, List<V>>或Map<K, Set<V>>,并且要忍受这个结构的笨拙. 假如目前有个需求是给两个年级添加5个学生,并且统计出一年级学生的信息: public class MultimapTest { class Student { String name; int age; } private static final String CLASS_NAME_1 = "一年级"; pr

Google Guava学习笔记——基础工具类String处理类的使用

不管你喜欢何种编程语言,很多时候针对string编程的处理都是乏味而且爱出错误的,很多时候,我们需要从文件或是数据库中读取数据,或者根据需求重新格式化或排序字符串给用户显示.幸运的是,Guava提供了一些非常有用的类,来很容易的处理String的问题,这些类有: CharMatcher Charsets Strings 使用Charsets类 在Java平台,Java支持6种标准字符集,它经常出现在下面的代码中: byte[] bytes = someString.getBytes(); 但上面

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

> Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency libraries, common annotations, string processing, I/O, 等等. 这些高质量的 API 可以使你的JAVa代码更加优雅,更加简洁,让你工作更加轻松愉悦.下面我们就开启优雅Java编程学习之旅! 项目相关信息: 官方首页:http://code.googl

Guava学习

Guava学习笔记目录 Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency libraries, common annotations, string processing, I/O, 等等. 这些高质量的 API 可以使你的JAVa代码更加优雅,更加简洁,让你工作更加轻松愉悦.下面是学习过程中的一些笔记和知识点的记录. 1.Guava学习笔记:Google