快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

伟德国际1949始于英国_酒文化网进入



信托Apache的大年夜名各位必然不会陌生,Java领域中常用的Ant,Maven,Struts1~2等都是托管在Apache下的项目,而在应用Apache框架的时刻,平日要添加框架的依附包,包括apache-commons系列的依附包,信托读者对此也不会陌生,而apache-common是异常有用的对象包,包孕了很多开源的对象,用于办理日常平凡编程常常会碰到的问题,削减重复劳动

一个优秀的类应该重写toString,hashCode,equals,compareTo措施,我们来看一下apache若何带我们简化这些操作,以下示例支持两种形式,一种是经由过程逐个参数添加从而精细节制那些参数介入对照和输出,另一种是经由过程反射让整个参数都介入对照和输出

Builder系列

//ToStringBuilder

@Override public String toString() {

return new ToStringBuilder(this).append(this.getId()).append(this.getUsername()).toString();

}

@Override public String toString() {

return ToStringBuilder.reflectionToString(this);}

// 以上输出款式为Test@1270b73[,]

// HashCodeBuilder@Override

public int hashCode() {return HashCodeBuilder.reflectionHashCode(this);

}

@Override public int hashCode() {

return new HashCodeBuilder(this).append(this.getId()).append(this.getUsername()).hashCode();

}

// EqulasBuilder@Override

public boolean equals(Object obj) {if (this == obj) {

return true;}

if (obj.getClass() == Test.class) {Test test = (Test) obj;

return new EqualsBuilder().append(this.getId(), test.getId()).append(this.getUsername(), test.getUsername()).isEquals();

}retur伟德国际1949始于英国n false;

}@Override

public boolean equals(Object obj) {return EqualsBuilder.reflectionEquals(this, obj);

}

// CompareToBuilder

@Override public int compareTo(Test o) {

return CompareToBuilder.reflectionCompare(this, o);}

@Override

public int compareTo(Test o) {return new CompareToBuilder().append(this.getId(), o.getId())

.append(this.getUsername(), o.getUsername()).toComparison();}

应用commons能最大年夜程度的简化代码,实现one-line编程,留意应用反射形式的时刻,static和transient不会介入对照或输出,要分外留意

有些环境下,Arrays满意不到你对数组的操作?没紧要,ArrayUtils帮你

ArrayUtils

public class TestMain {

public static void main(String[] args) {

int[] nums1 = { 1, 2, 3, 4, 5, 6 };// 经由过程常量创建新数组

int[] nums2 = ArrayUtils.EMPTY_INT_ARRAY;

// 对照两个数组是否相等ArrayUtils.isEquals(nums1, nums2);

// 输出数组,第二参数为数组为空时代替输出

ArrayUtils.toString(nums1, "array is null");

// 克隆新数组,留意此拷贝为深拷贝int[] nums3 = ArrayUtils.clone(nums1);

// 截取数组

ArrayUtils.subarray(nums1, 1, 2);

// 判断两个数组长度是否相等ArrayUtils.isSameLength(nums1, nums2);

// 判断两个数组类型是否相等,留意int和Integer对照时不相等

ArrayUtils.isSameType(nums1, nums2);

// 反转数组ArrayUtils.reverse(nums1);

// 查找数组元素位置

ArrayUtils.indexOf(nums1, 5);

// 查找数组元素着末呈现位置ArrayUtils.lastIndexOf(nums1, 4);

// 查找元素是否存在数组中

ArrayUtils.contains(nums1, 2);

// 将基础数组类型转为包装类型Integer[] nums4 = ArrayUtils.toObject(nums1);

// 判断是否为空,length=0或null都属于

ArrayUtils.isEmpty(nums1);

// 并集操作,合并数组ArrayUtils.addAll(nums1, nums2);

// 增添元素,鄙人标5中插入10,留意此处返回是新数组

ArrayUtils.add(nums1, 5, 1111);

// 删除指定位置元素,留意返回新数组,删除元素后面的元素会前移,维持数组有序ArrayUtils.remove(nums1, 5);

// 删除数组中值为10的元素,以值谋略不以下标

ArrayUtils.removeElement(nums1, 伟德国际1949始于英国10);}

}

还在应用传统反射吗?还在被反射的样板代码困扰?看commons若何赞助我们简化反射的事情,从样板代码抽身

ClassUtils

public class TestMain {

public static void main(String[] args) {

// 获取Test类所有实现的接口ClassUtils.getAllInterfaces(Test.class);

// 获取Test类所有父类

ClassUtils.getAllSuperclasses(Test.class);

// 获取Test类所在的包名ClassUtils.getPackageName(Test.class);

// 获取Test类简单类名

ClassUtils.getShortClassName(Test.class);

// 判断是否可以转型ClassUtils.isAssignable(Test.class, Object.class);

// 判断是否有内部类

ClassUtils.isInnerClass(Test.class);

}}

ConstructorUtils

public class TestMain {

public static void main(String[] args) {

// 获取参数为String的构造函数

ConstructorUtils.getAccessibleConstructor(Test.class, String.class);

// 履行参数为String的构造函数Test test = (Test) ConstructorUtils.invokeConstructor(Test.class,

"Hello");}

}

MethodUtils

public static void main(String[] args) throws NoSuchMethodException,

IllegalAccessException, InvocationTargetException {// 调用无参措施

Test test = new Test();MethodUtils.invokeMethod(test, "publicHello", null);

// 调用一参措施

MethodUtils.invokeMethod(test, "publicHello", "Hello");

// 调用多参措施MethodUtils.invokeMethod(test, "publicHello", new Object[] { "100",

new Integer(10) });

// 调用静态措施MethodUtils.invokeStaticMethod(Test.class, "staticHello", null);

}

FieldUtils

public class TestMain {

public static void main(String[] args) throws IllegalAccessException {

Test test = new Test("1", "Ray", "hello");

// 以下两个措施完全一样,都能获取共有或私有变量,由于第三个参数都设置了不反省FieldUtils.getDeclaredField(Test.class, "username", true);

FieldUtils.getField(Test.class, "username", true);

// 读取私有或公共变量的值FieldUtils.readField(test, "username", true);

// 读取静态变量

FieldUtils.readStaticField(Test.class, "STATIC_FIELD");

// 写入私有或共有变量FieldUtils.writeField(test, "username", "RayRay", true);

// 写入静态变量

FieldUtils.writeStaticField(Test.class, "STATIC_FIELD", "static_value");}

}

读者在应用时可能会发明,MethodUtils和ConstructUtils在org.apache.commons.lang.reflect和org.apache.commons.beanutils都存在,但FieldUtils和ClassUtils只在reflect傍边存在,由于beanutils供给了别的一种名为PropertyUtils的对属性存取更为方便的对象,但PropertyUtils不能获取传统反射的Field工具,笔者建议MethodUtils和ConstructUtils应该倾向应用beanutils,由于beanutils便是为反射而存在,更专业(虽然供给的措施险些一样),而应用ClassUtils和要获取传统的Field工具时应用reflect中的FieldUtils

很多环境下我们都必要将字符串转换为数字,或判断字符串是否是数字等等操作,NumberUtils赞助我们方便的从字符串转换为数字,在不应用NumberUtils环境下,若然字符串值不是数字,应用Integer.parseInt()时会报出java.lang.NumberFormatException,但在NumberUtils的环境下,只会返回0而不孕育发生差错

NumberUtilsandRandomUtils

public class TestMain {

public static void main(String[] args) throws IllegalAccessException {String str = "12.7";

/** org.apache.commons.lang.NumberUtils已经被弃用,

* 留意要引入org.apache.commons.lang.math.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类型 ,支持伟德国际1949始于英国int,float,long等数值NumberUtils.createBigDecimal(str);

/** RandomUtils赞助我们孕育发生随机数,不止是数字类型 ,

* 连boolean类型都可以经由过程RandomUtils孕育发生*/

RandomUtils.nextBoolean();RandomUtils.nextDouble();

RandomUtils.nextLong();// 留意这里传入的参数不是随机种子,而是在0~1000之间孕育发生一位随机数

RandomUtils.nextInt(1000);

}}

在开拓傍边字符串的应用和操作时最为频繁的,而null的字符串常常让我们报出NullPointerException,在应用StringUtils后,将不必伟德国际1949始于英国要为字符串的null值而烦恼,却又供给了更多的操作让我们更方便的操作字符串

StringUtils

public class TestMain {

public static void main(String[] args) throws IllegalAccessException {String str = "Hello World";

/** 因为StringUtils拥有100+的措施,笔者不一一枚举用法,

* 只枚举笔者觉得常用的或笔者应用过的*/

// isEmpty和isBlank的差别在于isEmpty不会轻忽空格,

// " "// 而isBlank会觉得是空,isBlank更常用

StringUtils.isEmpty(str);StringUtils.isNotEmpty(str);

StringUtils.isBlank(str);StringUtils.isNotBlank(str);

// strip--> 去除两真个aa// stripStart --> 去除开始位置的hell

// stripEnd-->伟德国际1949始于英国 去除结尾位置的orldStringUtils.strip(str, "aa");

StringUtils.stripStart(str, "hell");StringUtils.stripEnd(str, "orld");

// 返回字符串在第三次呈现A的位置StringUtils.ordinalIndexOf(str, "A", 3);

// 获取str 开始为hello结尾为orld中心的字符串// 留意此措施返回字符串-->substringBetween

// 留意此措施返回字符串数组(多了个s) --> substringsBetweenStringUtils.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" }, ",");

/** 常常性要把后台的字符串通报到条件作为html代码进行解释,

* 可以应用以下措施进行转换,以下措施输出为*

Hello

*/StringEscapeUtils.escapeHtml("Hello

");}

}

DateUtils and DateFormatUtils

public class TestMain {

public static void main(String[] args) throws IllegalAccessException {Date day1 = new Date();

/** 因为Aache的DateUtils和DateFormatUtils并没有Joda强大年夜,

*以是在这里只作简单的示例*/

// 增添一天

DateUtils.addDays(day1, 1);// 削减一年

DateUtils.addYears(day1, -1);

// 款式化光阴,第三参数为国际化,表示按美国光阴显示DateFormatUtils.format(day1, "yyyy-MM-dd", Locale.UK);

}

}

总结:

commons对象包很多开源组织都有供给,例如google,spring,apache都有各自的对象包,有浩繁的选择,但终极的目的只是为了方便我们法度榜样的开拓和掩护,简化我们编写一些常用的逻辑,提升我们开拓的效率,从而达到活在开源,善用开源

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: