标签 guava 下的文章 - 酷游博客
首页
关于
友链
Search
1
阿里的简历多久可以投递一次?次数多了有没有影响?可以同时进行吗?
45 阅读
2
Java中泛型的理解
40 阅读
3
Java 14 发布了,再也不怕 NullPointerException 了!
38 阅读
4
Java中的可变参数
37 阅读
5
该如何创建字符串,使用" "还是构造函数?
30 阅读
技术
登录
/
注册
找到
2
篇与
guava
相关的结果
2025-01-22
Google Guava 用户指南 ---- 初始Guava类库
原文地址 翻译地址 | 翻译:HollisChuang 转载请注明出处。 Guava项目包含多个基于Java基础的核心类库:collections(集合), caching(缓存), primitives support(原生类型支持 ), concurrency libraries(并发类库), common annotations(通用注解), string processing(字符串处理), I/O等。这些工具被google的开发者们广泛应用在各类产品中。 一般来说,通过JavaDoc并不是学习使用这些类库的最好方式。所以,我们试着通过一些可读性较高并且有趣的解释来帮助开发者了解Guava的特性。 该文档内容在不断完善中。 基本工具(Basic utilities) 让使用Java开发变得更加愉快。 使用并避免null: null是很模棱两可的,很多时候会导致令人疑惑的的错误,这让开发人员感到很不舒服。导致很多类似问题的原因都是因为盲目的接受null值。Guava基本工具在处理null的时候一般不会盲目的接受,而是采用拒绝或者快速失败(fail-fast)的方式处理。 前置条件: 置条件使你的方法更加简单 常用的Object对象方法: 简化Object方法方法的实现,比如toString()和hashCode()方法。 排序: Guava有强大的“流畅的比较器”类。 异常处理: 简化异常和错误的检查和传递 集合(Collections) Guava对JDK的集合做了扩展,这部分也是Guava中最成熟和被众所周知的。 不可变集合 可以用作常量的集合,不仅可以进行防御性编程还能提高性能。 新集合类型 实现了一些jdk本身并提供的新集合类型:multisets(多重集), multimaps(多重映射), tables(表),bidirectional maps(双向映射)等。 强大的工具集合, 提供了一些java.util.Collections中不提供的常用操作。 扩展工具 很轻易的创建集合的装饰器,或实现迭代器 缓存(Caches) 很实用的本地缓存,并支持各种各样的失效策略。 函数式风格(Functional idioms) 可以显著简化代码,但请谨慎使用 并发(Concurrency) 强大并且简单的抽象,让编写正确的并发代码更简单 ListenableFuture 完成后触发回调的Future 服务 帮你接管并控制一些复杂的状态逻辑的开始和结局。 字符串处理(String) 提供几个非常有用的字符串工具:分割,连接,填充等 原生类型(Primitives) 支持一些jdk并不提供的对基本类型(如int char,包括某些类型的无符号(unsined)形式)的操作 区间(Ranges) Guava对可比较的类型提供了强大的API来处理范围。包括连续和离散类型。 I / O 简化的I/O操作,特别是针对java5和java6的流和文件的I/O操作。 散列(Hashing) 提供比Object.hashCode()更复杂的散列实现,并提供布隆过滤器(Bloom Filter)的实现 事件总线(EventBus) 采用发布-订阅模式进行组件之间的通信,而无需显式地注册。 数学运算(Math) 提供了JDK中并不提供的优化的、经过充分测试的数学工具类 反射(Reflection) 反射机制工具类
技术
# guava
酷游
1月22日
0
16
0
2025-01-22
使用Optional避免NullPointerException
对于一个Java开发人员来说,最常见的异常估计就是NullPointerException了。当需要一个对象的而程序试图使用null的时候,就会抛出NPE。 粗心的使用null会造成各种惊人的错误。通过研究Google代码库,我们发现95%的集合不应该包含任何null值,让这些情况快速失败,而不是默默地接受null对开发人员来说更有用。 此外,null是不讨人喜欢的,因为他代表着模棱两可。很难去判断返回一个null代表着什么意思。例如,如果Map.get(key)返回一个null。你很难判断是返回的值本身是null,还是值在map中根本不存在。null可以表示成功、失败甚至任何情况。在写代码时我们应该尽量使用其他方式来代替null来明确表达你的意愿。 不得不说,在某些特定场景中使用null也是很正确的。无论在内存方面还是在性能方面,null都有其自身的优势。所以,在对象数组中使用null是不可避免的。但相对于底层库来说,在应用级别的代码中,他确实导致了很多混乱,也带来了很多不确定的语义和不容易解决的bug。就像使用Map.get一样,null代表着多种语义。关键的原因就是,null并无法明确的表示他自身的意义。 当null可以被用来一个不存在的东西时,我们不得不花更多的努力来确保程序不会抛出NullPointerExcepiton,其实常用的方法之一是: if(user != null){ user.login(); } 但是,相信很多人都厌倦了这种写法。 Optional Guava库(Java8中也提供了)中提供了Optional接口来使null快速失败,即在可能为null的对象上做了一层封装。Optional 的最常用价值在于,例如,假设一个方法返回某一个数据类型,调用这个方法的代码来根据这个方法的返回值来做下一步的动作,若该方法可以返回一个null值表示成功,或者表示失败,在这里看来都是意义含糊的,所以使用Optional 作为返回值,则后续代码可以通过isPresent()来判断是否返回了期望的值(原本期望返回null或者返回不为null,其意义不清晰),并且可以使用get()来获得实际的返回值。 接下来,通过一个例子来看Optional到底有什么用,我们写一个方法,判断当前用户的用户名是为null,如果用户名为null,我们就叫他游客。 code1 public void sayHello(String name){ if(name==null){ name = "游客"; } System.out.println("Hello, "+name); } code2 import com.google.common.base.Optional; public void sayHello(String name){ name = Optional.fromNullable(name).or("游客"); System.out.println("Hello, "+name); } 单从代码风格上来看,我们可以看出code2显得更加优雅。 使用Optional除了赋予null语义,增加了可读性,最大的优点在于它是一种傻瓜式的防护。Guava中Optional类就是用来强制提醒开发者,注意对Null的判断。迫使你积极思考引用缺失的情况 常用方法: Optional .of(T)为Optional赋值,当T为Null直接抛NullPointException,建议这个方法在调用的时候直接传常量,不要传变量 Optional .fromNullable(T) 为Optional赋值,当T为Null则使用默认值。建议与or方法一起用,风骚无比 T or(T) 当Optional的值为null时,使用or赋予的值返回。与fromNullable是一对好基友 Optional .absent() 为Optional赋值,采用默认值 T get() 当Optional的值为null时,抛出IllegalStateException,返回Optional的值 boolean isPresent() 如果Optional存在值,则返回True T orNull() 当Optional的值为null时,则返回Null。否则返回Optional的值 Set asSet() 将Optional中的值转为一个Set返回,当然只有一个值啦,或者为空,当值为null时。 参考资料: Guava Optional 的应用 Using and avoiding null 拓展阅读 What’s the point of Guava’s Optional class
技术
# guava
酷游
1月22日
0
22
0
易航博客