`
perfect5085
  • 浏览: 271312 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Jakarta Commnos lang学习

 
阅读更多

ReflectionToStringBuilder

ReflectionToStringBuilder类是用来实现类中的toString()方法的类,它采用Java反射机制(Reflection),

通过reflection包中的AccessibleObject类绕过访问控制而直接存取对象的私有成员。

因此在使用该类时,要注意运行环境的安全策略。

package sample;

import java.math.*;
import java.util.*;

import org.apache.commons.lang.builder.ReflectionToStringBuilder;

public class PoliticalCandidate {

    private String lastName;
    private String firstName;
    private Date dateOfBirth;
    private BigDecimal moneyRaised;
    private State homeState;
    
    public String toString() {
        return ReflectionToStringBuilder.toString(this);
    }
    
    public PoliticalCandidate(String lastName, String firstName,
            Date dob, BigDecimal money, State s) {
        this.lastName = lastName;
        this.firstName = firstName;
        this.dateOfBirth = dob;
        this.moneyRaised = money;
        this.homeState = s;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
    public String getLastName() {
        return lastName;
    }
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    public String getFirstName() {
        return firstName;
    }
    public void setDateOfBirth(Date dateOfBirth) {
        this.dateOfBirth = dateOfBirth;
    }
    public Date getDateOfBirth() {
        return dateOfBirth;
    }
    public void setMoneyRaised(BigDecimal moneyRaised) {
        this.moneyRaised = moneyRaised;
    }
    public BigDecimal getMoneyRaised() {
        return moneyRaised;
    }
    public void setHomeState(State homeState) {
        this.homeState = homeState;
    }
    public State getHomeState() {
        return homeState;
    }
}

package sample;

import org.apache.commons.lang.builder.ReflectionToStringBuilder;

public class State {
    
    private String shortName;
    private String name;
    
    public State(String shortName, String name) {
        this.shortName = shortName;
        this.name = name;
    }
    
    public String toString() {
        return ReflectionToStringBuilder.toString(this);
    }
    public void setShortName(String shortName) {
        this.shortName = shortName;
    }
    public String getShortName() {
        return shortName;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
}
package sample;

import java.math.*;
import java.util.*;

import junit.framework.TestCase;

public class TestToStirng extends TestCase {

    public void testToString() {
        State va = new State("VA", "Virginia");
        
        Calendar calendar = new GregorianCalendar();
        calendar.set(Calendar.YEAR, 1743);
        calendar.set(Calendar.MONTH, Calendar.APRIL);
        calendar.set(Calendar.DAY_OF_MONTH, 13);
        Date dob = calendar.getTime();
        
        BigDecimal moneyRaised = new BigDecimal(293829292.93);
        
        PoliticalCandidate candidate = 
            new PoliticalCandidate("Jefferson", "Thomas", 
                    dob, moneyRaised, va);
        
        System.out.println(candidate);
    }

}
 输出如下:

com.discursive.jccook.lang.builders.PoliticalCandidate@187aeca

    [lastName=Jefferson,\firstName=Thomas,

     dateOfBirth=Sat Apr 13 22:38:42 CST 1743,

     moneyRaised=\293829292.930000007152557373046875,

     state=\com.discursive.jccook.lang.builders.State@87816d

         [abbreviation=VA,name=Virginia]]

看完了ReflectionToStringBuilder后,发现一个问题是输出的内容过多,如果想对toString()方法输出的内容进行定制,

则需要使用ToStringBuilder和ToStringStyle这两个类。

ToStringBuilder类中的append方法可以向该类添加基本类型、数组和对象 ,只有添加的方法才会被toString方法输出。

ToStringStyle类则是对输出的内容进行格式化。

public String toString() {
        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
                .append("name", name)
                .append("age", age)
                .toString();
    }
 最近抽时间看完了ArrayUtils类,这个类的功能是实现数组的一些操作。

包括输出数据的值,克隆数组,翻转数组,对象数组和基本数组的转换,搜索特定项等等。

最基本的是toString()方法。该方法用来输出数组的内容,它有两个重载版本,分别是:

static String toString(Object array)

static String toString(Object array, String stringIfNull)

第一个方法:带有一个参数的方法在遇到数组为空时将打印"{}",

第二个方法:带有两个参数的方法在遇到数组为空时,便会打印stringIfNull的值。请看例子:

import org.apache.commons.lang.ArrayUtils;

public class Main {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[] intArray = { 1, 2, 3 };
        System.out.println("intArray contains: "
                + ArrayUtils.toString(intArray));
        
        double[] doubleArray = null;
        System.out.println("toString(Object[] array): "
                + ArrayUtils.toString(doubleArray));
        System.out.println("toString(Object[] array, String stringIfNull): "
                + ArrayUtils.toString(doubleArray, "doubleArray is null"));
    }
}
 ArrayUtils类实现的第二个功能是克隆数组,查看文档可以看到ArrayUtils类已经将基本数据类型和Object类型的clone()函数重载了。

所以它可以实现数组的克隆。请看以下代码片断:

int[] array = { 1, 2, 3 };

int[] cloneArray = ArrayUtils.clone(array);

只需要简单地以行代码就可以完成克隆操作了。

 

ArrayUtils类实现的另一个功能是翻转数组,即将数组反向排列。

同clone()方法相同,reverse()方法也已经将所有基本类型和类类型都重载了。只需要以行代码就能完成翻转操作。见下面代码:

int[] array = { 1, 2, 3 };

int[] reservered = ArrayUtils.reverse(array);

通过克隆和翻转数组两个方法,我们可以避免自己动手写循环来实现这些功能。

 

ArrayUtils类还实现了对象数组和基本类型数组的互相转换。使用的两个方法是toObject()和toPrimitive()。

ArrayUtils类还提供了在数组中查询查询特定项的方法——indexOf()和lastIndexOf()。

只需要将数组和要查找的值作为参数传入方法就可以了,返回的是特定项在数组中的位置。

分享到:
评论

相关推荐

    Jakarta Commons组件之Lang

    Jakarta Commons是Apache软件基金会...通过学习和使用Jakarta Commons Lang,开发者可以显著提高代码的效率和可读性,避免重复编写常见的基础工具代码。同时,源码和API文档能够帮助我们更好地理解和利用这个强大的库。

    Jakarta Commons-lang API & Source Code-chm

    Jakarta Commons-lang API & Source Code Jakarta lang包API帮助文档,并带有源码

    apache-jakarta旗下的所有开源项目jar文件

    apache-jakarta-commons-lang.jar apache-jakarta-commons-logging-adapters.jar apache-jakarta-commons-logging-api.jar apache-jakarta-commons-net.jar apache-jakarta-commons-net-1.4.1.jar apache-jakarta-...

    Jakarta Commons CookBook学习笔记

    ### Jakarta Commons CookBook 学习笔记 #### 一、Commons Lang: EqualsBuilder and HashCodeBuilder **1.1 概述** `EqualsBuilder` 和 `HashCodeBuilder` 是 Apache Commons Lang 包中提供的两个工具类,用于...

    jakarta.activation-1.2.2-API文档-中英对照版.zip

    赠送jar包:jakarta.activation-1.2.2.jar; 赠送原API文档:jakarta.activation-1.2.2-javadoc.jar; 赠送源代码:jakarta.activation-1.2.2-sources.jar; 赠送Maven依赖信息文件:jakarta.activation-1.2.2.pom;...

    JakartaCommons 详细教程更助于你的基础

    Jakarta Commons Lang库提供了一系列用于字符串处理、基本对象操作、数学计算和时间操作的工具。它包含以下组件: - ArrayUtils:数组操作工具类,例如数组的复制、排序等。 - StringUtils:字符串操作的工具类,如...

    jakarta commons-API

    **Jakarta Commons API** 是一个Java...通过深入学习这些API,开发者可以更有效地利用这些组件,提高开发效率和代码的可维护性。同时,Jakarta Commons项目也为Java社区贡献了大量的开源代码,推动了Java技术的发展。

    Jakarta项目的commons包说明

    - **Lang**: 这个模块提供了一些通用的、增强版的Java语言工具类,如StringUtils、NumberUtils等,它们补充了Java标准库的功能,如字符串操作、数字转换等。 - **Net**: 包含了网络通信的相关类,如FTPClient、...

    jakarta.validation-api-2.0.2-API文档-中文版.zip

    赠送jar包:jakarta.validation-api-2.0.2.jar; 赠送原API文档:jakarta.validation-api-2.0.2-javadoc.jar; 赠送源代码:jakarta.validation-api-2.0.2-sources.jar; 赠送Maven依赖信息文件:jakarta.validation...

    jakarta.annotation-api-1.3.5-API文档-中文版.zip

    赠送jar包:jakarta.annotation-api-1.3.5.jar; 赠送原API文档:jakarta.annotation-api-1.3.5-javadoc.jar; 赠送源代码:jakarta.annotation-api-1.3.5-sources.jar; 赠送Maven依赖信息文件:jakarta.annotation...

    jakarta.servlet-api-4.0.4-API文档-中文版.zip

    赠送jar包:jakarta.servlet-api-4.0.4.jar; 赠送原API文档:jakarta.servlet-api-4.0.4-javadoc.jar; 赠送源代码:jakarta.servlet-api-4.0.4-sources.jar; 赠送Maven依赖信息文件:jakarta.servlet-api-4.0.4....

    jakarta.activation-api-1.2.1-API文档-中英对照版.zip

    赠送jar包:jakarta.activation-api-1.2.1.jar; 赠送原API文档:jakarta.activation-api-1.2.1-javadoc.jar; 赠送源代码:jakarta.activation-api-1.2.1-sources.jar; 赠送Maven依赖信息文件:jakarta.activation...

    jakarta.el-3.0.3-API文档-中文版.zip

    赠送jar包:jakarta.el-3.0.3.jar; 赠送原API文档:jakarta.el-3.0.3-javadoc.jar; 赠送源代码:jakarta.el-3.0.3-sources.jar; 赠送Maven依赖信息文件:jakarta.el-3.0.3.pom; 包含翻译后的API文档:jakarta.el...

    jakarta.servlet-api-4.0.4-API文档-中英对照版.zip

    赠送jar包:jakarta.servlet-api-4.0.4.jar; 赠送原API文档:jakarta.servlet-api-4.0.4-javadoc.jar; 赠送源代码:jakarta.servlet-api-4.0.4-sources.jar; 赠送Maven依赖信息文件:jakarta.servlet-api-4.0.4....

    jakarta.jws-api-2.1.0.zip

    3. "jakarta.jws-api-2.1.0-sources.jar":这个文件包含了源代码,对于开发者来说是学习和调试API的好工具。通过查看源代码,开发者可以深入理解API的设计思路和实现细节,有助于更好地利用API进行开发。 Jakarta...

    jakarta.websocket-api-1.1.2-API文档-中文版.zip

    赠送jar包:jakarta.websocket-api-1.1.2.jar; 赠送原API文档:jakarta.websocket-api-1.1.2-javadoc.jar; 赠送源代码:jakarta.websocket-api-1.1.2-sources.jar; 赠送Maven依赖信息文件:jakarta.websocket-api...

    jakarta.activation-api-1.2.1-API文档-中文版.zip

    赠送jar包:jakarta.activation-api-1.2.1.jar; 赠送原API文档:jakarta.activation-api-1.2.1-javadoc.jar; 赠送源代码:jakarta.activation-api-1.2.1-sources.jar; 赠送Maven依赖信息文件:jakarta.activation...

    jakarta.annotation-api-1.3.5-API文档-中英对照版.zip

    赠送jar包:jakarta.annotation-api-1.3.5.jar; 赠送原API文档:jakarta.annotation-api-1.3.5-javadoc.jar; 赠送源代码:jakarta.annotation-api-1.3.5-sources.jar; 赠送Maven依赖信息文件:jakarta.annotation...

    jakarta-struts-1.1.zip_jakarta-Struts-1_jakarta-struts 1_jakarta

    总的来说,"jakarta-struts-1.1.zip"包含的资源对于学习和理解早期Java Web开发,尤其是Struts框架的运作机制非常有价值。通过查阅其中的API文档,开发者可以深入理解如何使用Struts来构建高效、可维护的Web应用。...

Global site tag (gtag.js) - Google Analytics