在org.apache.commons.lang.builder包中一共有7个类

org.apache.commons.lang.builder包中一共有7个类,用于帮助实现Java对象的一些基础的方法,如compareTo(), equals(), hashCode(), toString()等。他们分别是:
    
    CompareToBuilder – 用于辅助实现Comparable.compareTo(Object)方法;
    EqualsBuilder – 用于辅助实现Object.equals()方法;
    HashCodeBuilder – 用于辅助实现Object.hashCode()方法;
    ReflectionToStringBuilder – 使用反射机制辅助实现Object.toString()方法;
    ToStringBuilder – 用于辅助实现Object.toString()方法;
    StandardToStringStyle – 辅助ToStringBuilder控制标准格式;
    ToStringStyle – 辅助ToStringBuilder控制输出格式。

 

Java代码
  1. import java.util.Date;  
  2.   
  3. import org.apache.commons.lang.builder.CompareToBuilder;  
  4. import org.apache.commons.lang.builder.EqualsBuilder;  
  5. import org.apache.commons.lang.builder.HashCodeBuilder;  
  6. import org.apache.commons.lang.builder.ReflectionToStringBuilder;  
  7. import org.apache.commons.lang.builder.ToStringBuilder;  
  8. import org.apache.commons.lang.builder.ToStringStyle;  
  9. import org.apache.commons.lang.builder.StandardToStringStyle;  
  10.   
  11. public class BuilderTest {  
  12.   
  13.     public static void main(String[] args) {  
  14.         Person person1 = new Person("郑致力"32new Date());  
  15.         Person person2 = new Person("高婕"27new Date());  
  16.   
  17.         System.out.println("person1's info: " + person1);  
  18.         System.out.println("person2's info: " + person2);  
  19.         System.out.println("person1's hash code: " + person1.hashCode());  
  20.         System.out.println("person2's hash code: " + person2.hashCode());  
  21.         System.out.println("person1 equals person2? " + person1.equals(person2));  
  22.           
  23.         System.out.println("--------------More String Style of Object ------------------------------------");  
  24.         System.out.println("person1's info: " + person1.toString2(ToStringStyle.MULTI_LINE_STYLE));  
  25.         System.out.println("person1's info: " + person1.toString2(ToStringStyle.NO_FIELD_NAMES_STYLE));  
  26.         System.out.println("person1's info: " + person1.toString2(ToStringStyle.SHORT_PREFIX_STYLE));  
  27.         System.out.println("person1's info: " + person1.toString2(ToStringStyle.SIMPLE_STYLE));  
  28.         System.out.println("person1's info: " + person1.toString2(new StandardToStringStyle()));  
  29.     }  
  30. }  
  31.   
  32. class Person implements Comparable {  
  33.     private String name;  
  34.     private int age;  
  35.     private Date dateJoined;  
  36.   
  37.     public Person() {  
  38.     };  
  39.   
  40.     public Person(String name, int age, Date dateJoined) {  
  41.         this.name = name;  
  42.         this.age = age;  
  43.         this.dateJoined = dateJoined;  
  44.     }  
  45.   
  46.     public int compareTo(Object o) {  
  47.         if (!(o instanceof Person)) {  
  48.             return -1;  
  49.         }  
  50.         Person other = (Person) o;  
  51.         return new CompareToBuilder().append(name, other.getName()).append(age,  
  52.                 other.getAge()).append(dateJoined, other.getDateJoined())  
  53.                 .toComparison();  
  54.     }  
  55.   
  56.     public boolean equals(Object o) {  
  57.         if (!(o instanceof Person)) {  
  58.             return false;  
  59.         }  
  60.         Person other = (Person) o;  
  61.         return new EqualsBuilder().append(name, other.getName()).append(age,  
  62.                 other.getAge()).append(dateJoined, other.getDateJoined())  
  63.                 .isEquals();  
  64.     }  
  65.   
  66.     public int hashCode() {  
  67.         return new HashCodeBuilder().append(name).append(age)  
  68.                 .append(dateJoined).toHashCode();  
  69.     }  
  70.   
  71.     public String toString() {  
  72.         return new ToStringBuilder(this).append("name", name)  
  73.                 .append("age", age).append("dateJoined", dateJoined).toString();  
  74.     }  
  75.       
  76.     public String toString2(ToStringStyle style) {  
  77.         ToStringStyle _style = ToStringStyle.DEFAULT_STYLE;  
  78.         if (null != style) {  
  79.             _style = style;  
  80.         }  
  81.         return new ToStringBuilder(this, _style).append("name", name)  
  82.                 .append("age", age).append("dateJoined", dateJoined).toString();  
  83.     }      
  84.   
  85.     public String getName() {  
  86.         return name;  
  87.     }  
  88.   
  89.     public void setName(String name) {  
  90.         this.name = name;  
  91.     }  
  92.   
  93.     public int getAge() {  
  94.         return age;  
  95.     }  
  96.   
  97.     public void setAge(int age) {  
  98.         this.age = age;  
  99.     }  
  100.   
  101.     public Date getDateJoined() {  
  102.         return dateJoined;  
  103.     }  
  104.   
  105.     public void setDateJoined(Date dateJoined) {  
  106.         this.dateJoined = dateJoined;  
  107.     }  
  108.   
  109. }  
Java代码 复制代码
  1. <SPAN class=hilite1>import</SPAN> java.util.Date;   
  2.   
  3. <SPAN class=hilite1>import</SPAN> <SPAN class=hilite2>org</SPAN>.<SPAN class=hilite3>apache</SPAN>.<SPAN class=hilite4>commons</SPAN>.<SPAN class=hilite5>lang</SPAN>.<SPAN class=hilite6>builder</SPAN>.CompareToBuilder;   
  4. <SPAN class=hilite1>import</SPAN> <SPAN class=hilite2>org</SPAN>.<SPAN class=hilite3>apache</SPAN>.<SPAN class=hilite4>commons</SPAN>.<SPAN class=hilite5>lang</SPAN>.<SPAN class=hilite6>builder</SPAN>.EqualsBuilder;   
  5. <SPAN class=hilite1>import</SPAN> <SPAN class=hilite2>org</SPAN>.<SPAN class=hilite3>apache</SPAN>.<SPAN class=hilite4>commons</SPAN>.<SPAN class=hilite5>lang</SPAN>.<SPAN class=hilite6>builder</SPAN>.HashCodeBuilder;   
  6. <SPAN class=hilite1>import</SPAN> <SPAN class=hilite2>org</SPAN>.<SPAN class=hilite3>apache</SPAN>.<SPAN class=hilite4>commons</SPAN>.<SPAN class=hilite5>lang</SPAN>.<SPAN class=hilite6>builder</SPAN>.ReflectionToStringBuilder;   
  7. <SPAN class=hilite1>import</SPAN> <SPAN class=hilite2>org</SPAN>.<SPAN class=hilite3>apache</SPAN>.<SPAN class=hilite4>commons</SPAN>.<SPAN class=hilite5>lang</SPAN>.<SPAN class=hilite6>builder</SPAN>.ToStringBuilder;   
  8. <SPAN class=hilite1>import</SPAN> <SPAN class=hilite2>org</SPAN>.<SPAN class=hilite3>apache</SPAN>.<SPAN class=hilite4>commons</SPAN>.<SPAN class=hilite5>lang</SPAN>.<SPAN class=hilite6>builder</SPAN>.ToStringStyle;   
  9. <SPAN class=hilite1>import</SPAN> <SPAN class=hilite2>org</SPAN>.<SPAN class=hilite3>apache</SPAN>.<SPAN class=hilite4>commons</SPAN>.<SPAN class=hilite5>lang</SPAN>.<SPAN class=hilite6>builder</SPAN>.StandardToStringStyle;   
  10.   
  11. public class BuilderTest {   
  12.   
  13.     public static void main(String[] args) {   
  14.         Person person1 = new Person("郑致力"32new Date());   
  15.         Person person2 = new Person("高婕"27new Date());   
  16.   
  17.         System.out.println("person1's info: " + person1);   
  18.         System.out.println("person2's info: " + person2);   
  19.         System.out.println("person1's hash code: " + person1.hashCode());   
  20.         System.out.println("person2's hash code: " + person2.hashCode());   
  21.         System.out.println("person1 equals person2? " + person1.equals(person2));   
  22.            
  23.         System.out.println("--------------More String Style of Object ------------------------------------");   
  24.         System.out.println("person1's info: " + person1.toString2(ToStringStyle.MULTI_LINE_STYLE));   
  25.         System.out.println("person1's info: " + person1.toString2(ToStringStyle.NO_FIELD_NAMES_STYLE));   
  26.         System.out.println("person1's info: " + person1.toString2(ToStringStyle.SHORT_PREFIX_STYLE));   
  27.         System.out.println("person1's info: " + person1.toString2(ToStringStyle.SIMPLE_STYLE));   
  28.         System.out.println("person1's info: " + person1.toString2(new StandardToStringStyle()));   
  29.     }   
  30. }   
  31.   
  32. class Person implements Comparable {   
  33.     private String name;   
  34.     private int age;   
  35.     private Date dateJoined;   
  36.   
  37.     public Person() {   
  38.     };   
  39.   
  40.     public Person(String name, int age, Date dateJoined) {   
  41.         this.name = name;   
  42.         this.age = age;   
  43.         this.dateJoined = dateJoined;   
  44.     }   
  45.   
  46.     public int compareTo(Object o) {   
  47.         if (!(o instanceof Person)) {   
  48.             return -1;   
  49.         }   
  50.         Person other = (Person) o;   
  51.         return new CompareToBuilder().append(name, other.getName()).append(age,   
  52.                 other.getAge()).append(dateJoined, other.getDateJoined())   
  53.                 .toComparison();   
  54.     }   
  55.   
  56.     public boolean equals(Object o) {   
  57.         if (!(o instanceof Person)) {   
  58.             return false;   
  59.         }   
  60.         Person other = (Person) o;   
  61.         return new EqualsBuilder().append(name, other.getName()).append(age,   
  62.                 other.getAge()).append(dateJoined, other.getDateJoined())   
  63.                 .isEquals();   
  64.     }   
  65.   
  66.     public int hashCode() {   
  67.         return new HashCodeBuilder().append(name).append(age)   
  68.                 .append(dateJoined).toHashCode();   
  69.     }   
  70.   
  71.     public String toString() {   
  72.         return new ToStringBuilder(this).append("name", name)   
  73.                 .append("age", age).append("dateJoined", dateJoined).toString();   
  74.     }   
  75.        
  76.     public String toString2(ToStringStyle style) {   
  77.         ToStringStyle _style = ToStringStyle.DEFAULT_STYLE;   
  78.         if (null != style) {   
  79.             _style = style;   
  80.         }   
  81.         return new ToStringBuilder(this, _style).append("name", name)   
  82.                 .append("age", age).append("dateJoined", dateJoined).toString();   
  83.     }       
  84.   
  85.     public String getName() {   
  86.         return name;   
  87.     }   
  88.   
  89.     public void setName(String name) {   
  90.         this.name = name;   
  91.     }   
  92.   
  93.     public int getAge() {   
  94.         return age;   
  95.     }   
  96.   
  97.     public void setAge(int age) {   
  98.         this.age = age;   
  99.     }   
  100.   
  101.     public Date getDateJoined() {   
  102.         return dateJoined;   
  103.     }   
  104.   
  105.     public void setDateJoined(Date dateJoined) {   
  106.         this.dateJoined = dateJoined;   
  107.     }   
  108.   
  109. }  
import java.util.Date;

import org.apache.commons.lang.builder.CompareToBuilder;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ReflectionToStringBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import org.apache.commons.lang.builder.StandardToStringStyle;

public class BuilderTest {

    public static void main(String[] args) {
        Person person1 = new Person("郑致力", 32, new Date());
        Person person2 = new Person("高婕", 27, new Date());

        System.out.println("person1's info: " + person1);
        System.out.println("person2's info: " + person2);
        System.out.println("person1's hash code: " + person1.hashCode());
        System.out.println("person2's hash code: " + person2.hashCode());
        System.out.println("person1 equals person2? " + person1.equals(person2));
        
        System.out.println("--------------More String Style of Object ------------------------------------");
        System.out.println("person1's info: " + person1.toString2(ToStringStyle.MULTI_LINE_STYLE));
        System.out.println("person1's info: " + person1.toString2(ToStringStyle.NO_FIELD_NAMES_STYLE));
        System.out.println("person1's info: " + person1.toString2(ToStringStyle.SHORT_PREFIX_STYLE));
        System.out.println("person1's info: " + person1.toString2(ToStringStyle.SIMPLE_STYLE));
        System.out.println("person1's info: " + person1.toString2(new StandardToStringStyle()));
    }
}

class Person implements Comparable {
    private String name;
    private int age;
    private Date dateJoined;

    public Person() {
    };

    public Person(String name, int age, Date dateJoined) {
        this.name = name;
        this.age = age;
        this.dateJoined = dateJoined;
    }

    public int compareTo(Object o) {
        if (!(o instanceof Person)) {
            return -1;
        }
        Person other = (Person) o;
        return new CompareToBuilder().append(name, other.getName()).append(age,
                other.getAge()).append(dateJoined, other.getDateJoined())
                .toComparison();
    }

    public boolean equals(Object o) {
        if (!(o instanceof Person)) {
            return false;
        }
        Person other = (Person) o;
        return new EqualsBuilder().append(name, other.getName()).append(age,
                other.getAge()).append(dateJoined, other.getDateJoined())
                .isEquals();
    }

    public int hashCode() {
        return new HashCodeBuilder().append(name).append(age)
                .append(dateJoined).toHashCode();
    }

    public String toString() {
        return new ToStringBuilder(this).append("name", name)
                .append("age", age).append("dateJoined", dateJoined).toString();
    }
    
    public String toString2(ToStringStyle style) {
        ToStringStyle _style = ToStringStyle.DEFAULT_STYLE;
        if (null != style) {
            _style = style;
        }
        return new ToStringBuilder(this, _style).append("name", name)
                .append("age", age).append("dateJoined", dateJoined).toString();
    }    

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Date getDateJoined() {
        return dateJoined;
    }

    public void setDateJoined(Date dateJoined) {
        this.dateJoined = dateJoined;
    }

}

 

      这些builder用起来很简单,只要new一个实例,append需要参与的信息,然后加上toComparison、isEquals、toHashCode、 toString结尾就可以了。如果不需要使用append指定信息,则可直接使用反射机制进行自动化实现,如下面的Student类:

 

Java代码
  1. class Student extends Person {  
  2.     private int grad;  
  3.       
  4.     public Student() {super();}  
  5.       
  6.     public Student(String name, int age, Date dateJoined, int grad) {  
  7.         super(name, age, dateJoined);  
  8.         this.grad = grad;  
  9.     }  
  10.       
  11.     public int compareTo(Object o) {  
  12.         return CompareToBuilder.reflectionCompare(this, o);  
  13.     }  
  14.       
  15.     public boolean equals(Object o) {  
  16.         return EqualsBuilder.reflectionEquals(this, o);  
  17.     }  
  18.       
  19.     public int hashCode() {  
  20.         return HashCodeBuilder.reflectionHashCode(this);  
  21.     }  
  22.       
  23.     public String toString() {  
  24.         return ReflectionToStringBuilder.toString(this);  
  25.     }  
  26. }  
Java代码 复制代码
  1. class Student extends Person {   
  2.     private int grad;   
  3.        
  4.     public Student() {super();}   
  5.        
  6.     public Student(String name, int age, Date dateJoined, int grad) {   
  7.         super(name, age, dateJoined);   
  8.         this.grad = grad;   
  9.     }   
  10.        
  11.     public int compareTo(Object o) {   
  12.         return CompareToBuilder.reflectionCompare(this, o);   
  13.     }   
  14.        
  15.     public boolean equals(Object o) {   
  16.         return EqualsBuilder.reflectionEquals(this, o);   
  17.     }   
  18.        
  19.     public int hashCode() {   
  20.         return HashCodeBuilder.reflectionHashCode(this);   
  21.     }   
  22.        
  23.     public String toString() {   
  24.         return ReflectionToStringBuilder.toString(this);   
  25.     }   
  26. }  
class Student extends Person {
    private int grad;
    
    public Student() {super();}
    
    public Student(String name, int age, Date dateJoined, int grad) {
        super(name, age, dateJoined);
        this.grad = grad;
    }
    
    public int compareTo(Object o) {
        return CompareToBuilder.reflectionCompare(this, o);
    }
    
    public boolean equals(Object o) {
        return EqualsBuilder.reflectionEquals(this, o);
    }
    
    public int hashCode() {
        return HashCodeBuilder.reflectionHashCode(this);
    }
    
    public String toString() {
        return ReflectionToStringBuilder.toString(this);
    }
}

 

       这里需要补充一点,对于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的单元测试代码中,是这样调用的:

 

Java代码
  1. private static final StandardToStringStyle STYLE = new StandardToStringStyle();  
  2.       
  3.     static {  
  4.         STYLE.setUseShortClassName(true);  
  5.         STYLE.setUseIdentityHashCode(false);  
  6.         STYLE.setArrayStart("[");  
  7.         STYLE.setArraySeparator(", ");  
  8.         STYLE.setArrayEnd("]");  
  9.         STYLE.setNullText("%NULL%");  
  10.         STYLE.setSizeStartText("%SIZE=");  
  11.         STYLE.setSizeEndText("%");  
  12.         STYLE.setSummaryObjectStartText("%");  
  13.         STYLE.setSummaryObjectEndText("%");  
  14.     }  
Java代码 复制代码
  1. private static final StandardToStringStyle STYLE = new StandardToStringStyle();   
  2.        
  3.     static {   
  4.         STYLE.setUseShortClassName(true);   
  5.         STYLE.setUseIdentityHashCode(false);   
  6.         STYLE.setArrayStart("[");   
  7.         STYLE.setArraySeparator(", ");   
  8.         STYLE.setArrayEnd("]");   
  9.         STYLE.setNullText("%NULL%");   
  10.         STYLE.setSizeStartText("%SIZE=");   
  11.         STYLE.setSizeEndText("%");   
  12.         STYLE.setSummaryObjectStartText("%");   
  13.         STYLE.setSummaryObjectEndText("%");   
  14.     } 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
报错Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties 23/06/01 20:24:22 INFO SparkContext: Running Spark version 2.0.0 Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/collections/map/UnmodifiableMap at org.apache.hadoop.conf.Configuration$DeprecationContext.<init>(Configuration.java:409) at org.apache.hadoop.conf.Configuration.<clinit>(Configuration.java:448) at org.apache.hadoop.security.UserGroupInformation.ensureInitialized(UserGroupInformation.java:260) at org.apache.hadoop.security.UserGroupInformation.loginUserFromSubject(UserGroupInformation.java:790) at org.apache.hadoop.security.UserGroupInformation.getLoginUser(UserGroupInformation.java:760) at org.apache.hadoop.security.UserGroupInformation.getCurrentUser(UserGroupInformation.java:633) at org.apache.spark.util.Utils$$anonfun$getCurrentUserName$1.apply(Utils.scala:2245) at org.apache.spark.util.Utils$$anonfun$getCurrentUserName$1.apply(Utils.scala:2245) at scala.Option.getOrElse(Option.scala:121) at org.apache.spark.util.Utils$.getCurrentUserName(Utils.scala:2245) at org.apache.spark.SparkContext.<init>(SparkContext.scala:297) at org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:2256) at org.apache.spark.sql.SparkSession$Builder$$anonfun$8.apply(SparkSession.scala:831) at org.apache.spark.sql.SparkSession$Builder$$anonfun$8.apply(SparkSession.scala:823) at scala.Option.getOrElse(Option.scala:121) at org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:823) at spark.sparkMysql$.main(sparkToMysql.scala:11) at spark.sparkMysql.main(sparkToMysql.scala) Caused by: java.lang.ClassNotFoundException: org.apache.commons.collections.map.UnmodifiableMap at java.net.URLClassLoader.findClass(URLClassLoader.java:382) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 18 more Process finished with exi
最新发布
06-02

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值