Guava学习——工具类

来源:互联网 发布:移动硬盘监控软件 编辑:程序博客网 时间:2024/05/17 06:50

Guava本质就是一些工具类,口号是优化了代码,但是目前为止,有些地方优化得不是很懂,现在的感觉就是总体来说就是逼格提高了

前置条件之Preconditions类

  • Preconditions类中包含的方法:
方法名 作用 检查失败时抛出的异常 checkArgument(boolean) 检查boolean是否为true,用来检查传递给方法的参数 IllegalArgumentException checkNotNull 检查value是否为null,该方法直接返回value,因此可以内嵌使用checkNotNull NullPointerException checkState(boolean) 用来检查对象的某些状态 IllegalStateException checkPositionIndex(int index, int size) 检查index作为索引值对某个列表、字符串或数组是否有效,index属于[0,size) IndexOutOfBoundsException checkPositionIndexs(int start, int end,int size) 检查[start, end]表示的位置范围对某个列表、字符串或数组是否有效 IndexOutOfBoundsException

- Preconditions类中的每一个方法都有三个变种:
1. 没有额外的参数:判处的异常没有错误信息
2. 有一个Object对象作为参数,抛出的异常使用Object.toString()作为错误消息
3. 有一个String对象作为额外参数,并且有一组任意数量的附加Object对象:这个变种处理异常消息的方式有点类似printf,但考虑GWT的兼容性和效率,只支持%s指示符
- 举例说明:
png one

Objects类 V.S. Object类

  • guava通过Objects类来优化了Object类的equals()、hashCode()、toString()以及compare()和compareTo()

equals()

  • 当一个对象中的字段可以为null时,实现Object.equals方法会很痛苦,因为不得不分别对它们进行null检查。使用Objects.equal帮助你执行null敏感的equals判断,从而避免抛出NullPointerException,(主要是可以不用自己实现equals()方法,并且添加了对null的判断)
Objects.equal("a", "a"); // returns trueObjects.equal(null, "a"); // returns falseObjects.equal("a", null); // returns falseObjects.equal(null, null); // returns true
...import com.google.common.base.Objects;...public class Demo{    ...    public boolean equals(Object otherObject)    {        return Objects.equal(this,otherObject);    }    ...}

hashCode()

  • 也是简化了传统对Object类中hashCode()方法的重写
...import com.google.common.base.Objects;...public class Demo{    String parameterOne;    String parameterTwo;    ...    public int hashCode()    {        return Objects.hashCode(parameterOne,parameterTwo);    }    /*原始写法    public int hashCode()    {        return 7*parameterOne+11*parameterTwo();    }    */}

toString()

  • 好的toString方法在调试时是无价之宝,但是编写toString方法有时候却很痛苦。使用 Objects.toStringHelper可以轻松编写有用的toString方法
// Returns "ClassName{x=1}"Objects.toStringHelper(this).add("x", 1).toString();// Returns "MyObject{x=1}"Objects.toStringHelper("MyObject").add("x", 1).toString();

compare和compareTo

  • 实现一个比较器Comparator,或者直接实现Comparable接口有时也伤不起。考虑一下这种情况(注意:并不是所有情况):
class Person implements Comparable<Person> {  private String lastName;  private String firstName;  private int zipCode;  public int compareTo(Person other) {    int cmp = lastName.compareTo(other.lastName);    if (cmp != 0) {      return cmp;    }    cmp = firstName.compareTo(other.firstName);    if (cmp != 0) {      return cmp;    }    return Integer.compare(zipCode, other.zipCode);  }}
  • ComparisionChain:ComparisonChain执行一种懒比较,它执行比较操作直至发现非零的结果,在那之后的比较输入将被忽略。
//guava 链式风格public int compareTo(Foo that) {    return ComparisonChain.start()            .compare(this.aString, that.aString)            .compare(this.anInt, that.anInt)        .compare(this.anEnum,that.anEnum,Ordering.natural().nullsLast())            .result();}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 南京老人去世后怎么办 吸毒强戒两年家人该怎么办 犯人在监狱里病亡怎么办 父母去世监狱人怎么办 公司不续签合同怎么办 股票亏20个点后怎么办 摩托车给扣了怎么办 通知拘留跑了怎么办 假烟倒卖会怎么办 卖了40万假烟怎么办 刑事拘留15天了怎么办 治安传唤人不到怎么办 治安处罚有劣迹怎么办 学生怀孕了该怎么办 有病不能拘留那怎么办 拘留所不交伙食费怎么办 治安拘留不执行怎么办 释放证明书丢了怎么办 银行提前收贷款怎么办 存货周转天数高怎么办 欠款人没有财产怎么办 起诉后对方没钱怎么办 法院起诉人不到怎么办 治安拘留跑了怎么办 看守所里生病了怎么办 二审上诉被驳回怎么办 醉酒驾车取保候审以后怎么办 小案子证据不足怎么办 撞车不严重逃逸怎么办 被执行人没有财产执行怎么办 挖到人头了怎么办 取保保证金不退怎么办 被诬陷经济诈骗怎么办 醉驾刑事拘留后怎么办 被别人举报赌博怎么办 涉黄刑事拘留怎么办取保候审 换了车牌保险怎么办 车辆转让后保险怎么办 立案后警察不管怎么办 打架后对方讹人怎么办 工商被恶意举报怎么办