forked from hanyong/note
-
Notifications
You must be signed in to change notification settings - Fork 6
开篇:java tostring()用法
SHIELDMARS edited this page Jul 22, 2015
·
1 revision
Object类具有一个toString()方法,你创建的每个类都会继承该方法。它返回对象的一个String表示,并且对于调试非常有帮助。然而对于默认的toString()方法往往不能满足需求,需要覆盖这个方法。 toString()方法将对象转换为字符串。看以下代码:
package tostring;
class Villain {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Villain(String name) {
this.name = name;
}
public String toString() {
return "我是微蓝我的名字是" + name;
}
}
public class Orc extends Villain {
private int orcNum;
// 构造函数
public Orc(String name, int orcNum) {
super(name);
this.orcNum = orcNum;
}
public void change(String name, int orcNum) {
setName(name);
this.orcNum = orcNum;
}
public String toString() {
return "Orc" + orcNum + ":" + super.toString();
}
public static void main(String[] args) {
Orc orc = new Orc("张三", 12);
System.out.println(orc);
orc.change("李四", 19);
System.out.println(orc);
}
}
结果: Orc12:我是微蓝我的名字是张三 Orc19:我是微蓝我的名字是李四
编写一个工具类,用于在控制台输出Iterator。
package tostring;
import java.util.Iterator;
public class Printer {
static void printAll(Iterator<?> e){
while(e.hasNext()){
System.out.println(e.next());
}
}
}
在Hamster类中重写父类的toString()方法。
package tostring;
public class Hamster {
private int hamsterNumber;
public Hamster(int hamsterNumber) {
this.hamsterNumber = hamsterNumber;
}
public String toString() {
return "This is Hamster#" + hamsterNumber;
}
}
在HamsterMaze类中使用容器类加载Hamster类对象并输出结果。
package tostring;
import java.util.ArrayList;
import java.util.List;
public class HamsterMaze {
public static void main(String[] args) {
List<Hamster> list = new ArrayList<Hamster>();
for (int i = 0; i < 3; i++) {
list.add(new Hamster(i));
Printer.printAll(list.iterator());
}
}
}
结果: This is Hamster #0 This is Hamster #1
###3.一个实现toString()的通用的Bean-工具方法
在作一个项目时发现,许多bean需要实现toString()方法,就实现一个通用的bean,然后通过其他继承即可。
package tostring;
import java.lang.reflect.Field;
public class BaseBean {
public String toString() {
StringBuffer sb = new StringBuffer();
try {
Class t = this.getClass();
Field[] fileds = t.getDeclaredFields();
for (int i = 0; i < fileds.length; i++) {
Field field = fileds[i];
field.setAccessible(true);
sb.append("{");
sb.append(field.getName());
sb.append(":");
if (field.getType() == Integer.class) {
sb.append(field.getInt(this));
} else if (field.getType() == Long.class) {
sb.append(field.getLong(this));
} else if (field.getType() == Boolean.class) {
sb.append(field.getBoolean(this));
} else if (field.getType() == char.class) {
sb.append(field.getChar(this));
} else if (field.getType() == Double.class) {
sb.append(field.getDouble(this));
} else if (field.getType() == Float.class) {
sb.append(field.getFloat(this));
} else
sb.append(field.get(this));
sb.append("}");
}
} catch (Exception e) {
e.printStackTrace();
}
return sb.toString();
}
}
测试类:
package tostring;
public class TestBean extends BaseBean{
private String name;
private int age;
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 TestBean(String name, int age) {
this.name = name;
this.age = age;
}
public static void main(String[] args) {
TestBean testBean=new TestBean("张三",9);
System.out.println(testBean);
}
}
结果: {name:张三}{age:9}