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()。
只需要将数组和要查找的值作为参数传入方法就可以了,返回的是特定项在数组中的位置。
分享到:
相关推荐
Umi-OCR-main.zip
基于springboot+Web的毕业设计选题系统源码数据库文档.zip
基于springboot校外兼职教师考勤管理系统源码数据库文档.zip
58商铺全新UI试客试用平台网站源码
基于springboot大学生就业信息管理系统源码数据库文档.zip
基于SpringBoot的口腔诊所系统源码数据库文档.zip
数据存放网盘,txt文件内包含下载链接及提取码,永久有效。失效会第一时间进行补充。样例数据及详细介绍参见文章:https://blog.csdn.net/T0620514/article/details/143956923
3-240P2162218.zip
网络安全 基于Qt创建的Linux系统下的浏览器.zip
C++ 类和对象:多态-练习题目2(制作咖啡和茶叶)
基于springboot+J2EE在线项目管理与任务分配中的应用源码数据库文档.zip
简介本项目提供了一个在51单片机上运行的简单操作系统,旨在帮助学习者深入理解操作系统的基本原理和任务调度机制。该操作系统通过汇编和C语言编写,实现了任务调度、中断处理等核心功能,并提供了详细的源代码和注释,方便学习和实践。
本文将深度卷积神经网络(CNN)设计实现一个复杂结构的生成模型,旨在通过多阶段的编码器-解码器结构,能够有效地将灰度图像转换为彩色图像。最后,本文将实现一个简单的Web应用,用户可以通过上传灰度图像,应用会使用预训练的Caffe模型对其进行颜色化,并将结果返回给用户。 1.模型设计:模型由多个卷积层、ReLU激活函数和批归一化层组成,通过前向传播函数将输入的灰度图像(L通道)转换为彩色图像(ab通道)。如果指定了 pretrained=True,则会自动下载并加载预训练的模型权重。 2. 系统通过Flask框架提供了一个Web应用,用户可以上传灰度图像,系统会自动将其转换为彩色图像,并在网页上显示结果。整个过程包括文件验证、图像处理、颜色化预测和结果展示,具有较高的实用性和用户体验。
一个JAVA图形化的、联网的五子棋游戏.zip javaweb
KWDB 是一款面向 【AIoT 场景】的【分布式多模数据库】,支持在同一实例同时建立时序库和关系库并融合处理多模数据,具备千万级设备接入、百万级数据秒级写入、亿级数据秒级读取等时序数据高效处理能力,具有稳定安全、高可用、易运维等特点。
页面数量:7页 网页主题:网站模板、酒店网站模板、官方网站模板 网页页面:首页、关于我们、相关服务、服务详情、在线博客、博客详情、在线留言 页面实现元素:加载动画、滚动加载、主题切换、导航栏 、轮播图、图文列表、图片切换、 文字列表、 按钮悬停、图片悬停、表单 实现技术:HTML、CSS 、JQuery 源码样式及js文件均分开存放,所有内容仅供初学者学习参考
内容概要:本文档提供了详细的 Neo4j 安装与配置指南,涵盖 Windows、Linux 和 Mac 系统的安装步骤。具体包括下载、安装、启动服务、修改配置文件(如端口配置、远程访问和内存限制)、设置管理员密码以及基本的 Cypher 查询语言使用方法。同时,还提供了一些常见问题及其解决方案。 适合人群:数据库管理员、软件开发人员、系统管理员。 使用场景及目标:①帮助初学者快速掌握 Neo4j 的安装与配置;②适用于需要搭建和使用图数据库的项目;③为已有用户解决常见问题。 其他说明:本文档不仅包含了基础的安装和配置流程,还提供了实际操作中可能遇到的问题及其解决方法,有助于提高使用者的实际操作能力。
基于SpringBoot+Vue的软件产品展示销售系统源码数据库文档.zip
《书戴嵩画牛》教学课件.pptx
20届智能车 【项目资源】:包含前端、后端、移动开发、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源,毕业设计等各种技术项目的源码。包括C++、Java、python、web、C#、EDA等项目的源码。 【适用人群】:适用于希望学习不同技术领域的初学者或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。