2009年8月18日 星期二

Lang-其它好用的 Utils

lang.time 底下好用的 Utils (org.apache.commons.lang.time)

// 將日期轉為字串
Date date1 = new Date();
String formatDate = DateFormatUtils.format(date1, "yyyy-MM-dd");
System.out.println(formatDate);

// 將字串轉為日期
Date date2 = DateUtils.parseDate(formatDate, new String[] {"yyyyMMdd", "yyyy-MM-dd" });
System.out.println(date2);

// 只有比較日期, 沒有比較時間, 所以會回傳 true
boolean isSameDay = DateUtils.isSameDay(date1, date2);
System.out.println(isSameDay);


lang.builder 底下好用的 Utils (org.apache.commons.lang.builder)
#) EqualsBuilder 要 override equals 時,

public boolean equals(Object obj) {
if (obj == null) { return false; }
if (obj == this) { return true; }
if (obj.getClass() != getClass()) {
return false;
}
MyClass rhs = (MyClass) obj;
return new EqualsBuilder()
.appendSuper(super.equals(obj))
.append(field1, rhs.field1)
.append(field2, rhs.field2)
.append(field3, rhs.field3)
.isEquals();
}
// or
public boolean equals(Object obj) {
return EqualsBuilder.reflectionEquals(this, obj);
}



#) HashCodeBuilder 要 override hashCode 時,

public class Person {
String name;
int age;
boolean smoker;
...

public int hashCode() {
// you pick a hard-coded, randomly chosen, non-zero, odd number
// ideally different for each class
return new HashCodeBuilder(17, 37).
append(name).
append(age).
append(smoker).
toHashCode();
}
}
// or
public int hashCode() {
return HashCodeBuilder.reflectionHashCode(this);
}


#) ToStringBuilder 要看物件裡有什麼內容時,
1. override toString()

public class Person {
String name;
int age;
boolean smoker;

...

public String toString() {
return new ToStringBuilder(this).
append("name", name).
append("age", age).
append("smoker", smoker).
toString();
}
}

2. 直接將 Object 印出來

Person P = new Person();
p.setName("hank");
...
ToStringBuilder.reflectionToString(p);
// or
ToStringBuilder.reflectionToString(ToStringStyle.MULTI_LINE_STYLE, p);

0 意見: