CompareToBuilder – 用于辅助实现Comparable.compareTo(Object)方法;
EqualsBuilder – 用于辅助实现Object.equals()方法;
HashCodeBuilder – 用于辅助实现Object.hashCode()方法;
ReflectionToStringBuilder – 使用反射机制辅助实现Object.toString()方法;
ToStringBuilder – 用于辅助实现Object.toString()方法;
StandardToStringStyle – 辅助ToStringBuilder控制标准格式;
ToStringStyle – 辅助ToStringBuilder控制输出格式。
1. 两个对象相等,必须产生相同的hashcode,但是两个对象有相同的hashcode,并不一定相同。
2.EqualsBuilder 用于对象的比较:
public boolean equals(Object obj)
{
// TODO Auto-generated method stub
if (obj == null) return false;
if (!(obj instanceof Dog)) return false;
Dog dog = (Dog) obj;
return new EqualsBuilder().append(getName(), dog.getName()).isEquals();
}
append方法通过判断传入的参数是否相同来改变EqualsBuilder对象的isEquals的值。
3. EqualsBuilder还有一个通过java反射来比较,使用了java 的递归,方法名称为 refelectionEquals(obj,obj)。
4.HashCodeBuilder 用于生成hashcode,一般在复写object类的hashcode()方法的时候使用,如:
@Override
public int hashCode()
{
// TODO Auto-generated method stub
return new HashCodeBuilder().append(getName()).toHashCode();
}
5.AccessibleObject 最常用的方法为AccessibleObject.setAccessible(obj,true),用于改变这个对象的的所有的field的访问权限。
6.apache的ArrayUtils类 关于对数组的操作,
isEmpty(array) 判断某一个数组是否为空
isNotEmpty(array) 是否不为空 !isEmpty(array);
asCollection(String commaDelim) 将有分隔符的字符串转换成Collection
7.CompareToBuilder 用于对象的比较,通常该对象实现comparable接口,实现compareTo方法,例如:
public int compareTo(Object o)
{
// TODO Auto-generated method stub
return new CompareToBuilder().append(getId(), ((Dog) o).getId()).toComparison();
}
8.ReflectionToStringBuilder ReflectionToStringBuilder类是用来实现类中的toString()方法的类,它采用Java反射机制(Reflection),
通过reflection包中的AccessibleObject类绕过访问控制而直接存取对象的私有成员。因此在使用该类时,要注意运行环境的安全策略。
@Override9. 这里需要补充一点,对于ToStringStyle类,代码中已经内置了5种,分别为ToStringStyle.DEFAULT_STYLE、ToStringStyle.MULTI_LINE_STYLE、ToStringStyle.NO_FIELD_NAMES_STYLE、ToStringStyle.SHORT_PREFIX_STYLE、ToStringStyle.SIMPLE_STYLE。不知道为什么,这5种内置类的实现都被定义成了private static final类了。所以如果上述5种类不能满足你的要求的话,想继承他们是不可能的。所以你需要创建StandardToStringStyle一个实例,然后调用它的方法来实现自定义的格式。在StandardToStringStyle的单元测试代码中,是这样调用的:
public String toString()
{
// TODO Auto-generated method stub
return ReflectionToStringBuilder.toString(this);
}
private static final StandardToStringStyle STYLE = new StandardToStringStyle();10.SynchronizedList ArrayList 和Vector
static {
STYLE.setUseShortClassName(true);
STYLE.setUseIdentityHashCode(false);
STYLE.setArrayStart("[");
STYLE.setArraySeparator(", ");
STYLE.setArrayEnd("]");
STYLE.setNullText("%NULL%");
STYLE.setSizeStartText("%SIZE=");
STYLE.setSizeEndText("%");
STYLE.setSummaryObjectStartText("%");
STYLE.setSummaryObjectEndText("%");
}
11. StringUtils的replace方法,提供可以全部替换该字符串中的字符
String after = StringUtils.replace(StringUtils.replace(result, "\"checked\":\"true\"", "\"checked\":true",
-1),
"\"checked\":\"false\"", "\"checked\":false", -1);
System.out.println(result);
System.out.println(after);
12.ArrayUtils类方法的学习
toMap(Object[] obj) 将一个二维数组转换成Map对象。
toObject(int[] array) 将所有的数组包装成对象类型。
toPrimitive(Integer[] array) 将所有的包装类型拆箱成原始类型。
remove(Object[],int index) 移除指定下标的元素
removeElement(Object[],Object element) 移除指定元素
13.NumberUtils 数字操作类
// 判断字符串是否为整数
NumberUtils.isDigits(str);
// 判断字符串是否为数字
NumberUtils.isNumber(str);
// 获取参数中最大的值,支持传入数组
NumberUtils.max(10, 20, 30);
// 获取参数中最小的值,支持传入数组
NumberUtils.min(10, 20, 30);
// 将字符串转换为int类型,支持float,long,short等数值类型
NumberUtils.toInt(str);
// 通过字符串创建BigDecimal类型 ,支持int,float,long等数值
NumberUtils.createBigDecimal(str);
14.RandomUtils 随机数操作,可以得到boolean值 long值 double值
RandomUtils.nextBoolean();
RandomUtils.nextDouble();
RandomUtils.nextLong();
// 注意这里传入的参数不是随机种子,而是在0~1000之间产生一位随机数
RandomUtils.nextInt(1000);
15.StringUtils 字符串操作类
String str = "Hello World";
/*
* 由于StringUtils拥有100+的方法,笔者不逐一列举用法,
* 只列举笔者认为常用的或笔者使用过的
*/
// isEmpty和isBlank的区别在于isEmpty不会忽略空格,
// " "<--对于这样的字符串isEmpty会认为不是空,
// 而isBlank会认为是空,isBlank更常用
StringUtils.isEmpty(str);
StringUtils.isNotEmpty(str);
StringUtils.isBlank(str);
StringUtils.isNotBlank(str);
// strip --> 去除两端的aa
// stripStart --> 去除开始位置的hell
// stripEnd --> 去除结尾位置的orld
StringUtils.strip(str, "aa");
StringUtils.stripStart(str, "hell");
StringUtils.stripEnd(str, "orld");
// 返回字符串在第三次出现A的位置
StringUtils.ordinalIndexOf(str, "A", 3);
// 获取str 开始为hello结尾为orld中间的字符串
// 注意此方法返回字符串 -->substringBetween
// 注意此方法返回字符串数组(多了个s) --> substringsBetween
StringUtils.substringBetween(str, "hell", "orld");
StringUtils.substringsBetween(str, "hell", "orld");
// 重复字符串,第二种重载形式为在重复中用hahah拼接
StringUtils.repeat(str, 3);
StringUtils.repeat(str, "hahah", 2);
// 统计参数2在字符串中出现的次数
StringUtils.countMatches(str, "l");
// 判断字符串是否全小写或大写
StringUtils.isAllLowerCase(str);
StringUtils.isAllUpperCase(str);
// isAlpha --> 全部由字母组成返回true
// isNumeric -->全部由数字组成返回true
// isAlphanumeric -->全部由字母或数字组成返回true
// isAlphaSpace -->全部由字母或空格组成返回true
// isWhitespace -->全部由空格组成返回true
StringUtils.isAlpha(str);
StringUtils.isNumeric(str);
StringUtils.isAlphanumeric(str);
StringUtils.isAlphaSpace(str);
StringUtils.isWhitespace(str);
// 缩进字符串,第二参数最低为 4,要包含...
// 现在Hello World输出为H...
StringUtils.abbreviate(str, 4);
// 首字母大写或小写
StringUtils.capitalize(str);
StringUtils.uncapitalize(str);
// 将字符串数组转变为一个字符串,通过","拼接,支持传入iterator和collection
StringUtils.join(new String[] { "Hello", "World" }, ",");