Effective Java 对于所用对象都通用的方法 10.始终要覆盖toString,玩转toString
来源:互联网 发布:淘宝运动服 编辑:程序博客网 时间:2024/05/29 17:15
虽然java.lamg.object提供了toString()方法的实现,但是它返回的字符串通常不是用户所期望看到的。就是一个地址,没有多大的意义。
toString的通用约定指出,返回的字符串应该是一个简洁的,但信息丰富,并且易于阅读的表达形式。
所以说对于类一定要覆盖toString方法,以便于获取到想要的信息,而且可以根据自己想要的信息来修改覆盖toString方法。
例:
import com.google.gson.Gson;public class User { private String username; private String password; private int age; private String info; public User() { // TODO Auto-generated constructor stub } public void setUsername(String username) { this.username = username; } public void setPassword(String password) { this.password = password; } public void setAge(int age) { this.age = age; } public void setInfo(String info) { this.info = info; } public String getUsername() { return username; } public String getPassword() { return password; } public int getAge() { return age; } public String getInfo() { return info; } @Override public String toString() { return "User [username=" + username + ", password=" + password + ", age=" + age + ", info=" + info + "]"; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + age; result = prime * result + ((info == null) ? 0 : info.hashCode()); result = prime * result + ((password == null) ? 0 : password.hashCode()); result = prime * result + ((username == null) ? 0 : username.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; User other = (User) obj; if (age != other.age) return false; if (info == null) { if (other.info != null) return false; } else if (!info.equals(other.info)) return false; if (password == null) { if (other.password != null) return false; } else if (!password.equals(other.password)) return false; if (username == null) { if (other.username != null) return false; } else if (!username.equals(other.username)) return false; return true; } public static void main(String[] args) { User user = new User(); user.setUsername("yancy"); user.setPassword("weixin_39923324"); user.setAge(18); user.setInfo("weixin_39923324"); System.out.println(user.toString()); }}
打印的结果:User [username=yancy, password=weixin_39923324, age=18, info=weixin_39923324]
这种方法大家肯定都会,但是呢,我想要CSV数据格式,或者说我想要JSON数据格式,明明可以在toString方法中实现,为什么要转弯来实现。
CSV:逗号分隔。
实现方法:
String csv = user.getUsername() + "," + user.getPassword() + "," + user.getAge() + "," + user.getInfo(); System.out.println(csv);
但是一个List呢, 无非嵌套循环。
StringBuilder sb = new StringBuilder(); for (User u : users) { sb.append(u.getUsername() + "," + u.getPassword() + "," + u.getAge() + "," + u.getInfo() + "\n"); } }
这样会不会很low,而且多地方使用,那还需封装,现在有一个高大上的方法,继承ArrarList,修改toString方法,去掉”[],”即可。
ArrayList toString方法:
public String toString() { Iterator<E> it = iterator(); if (! it.hasNext()) return "[]"; StringBuilder sb = new StringBuilder(); sb.append('['); for (;;) { E e = it.next(); sb.append(e == this ? "(this Collection)" : e); if (! it.hasNext()) return sb.append(']').toString(); sb.append(',').append(' '); } }
修改后:
import java.util.ArrayList;import java.util.Iterator;public class MyList<E> extends ArrayList<E> { /** * */ private static final long serialVersionUID = 1L; @Override public String toString() { super.toString(); Iterator<E> it = iterator(); if (!it.hasNext()) return "[]"; StringBuilder sb = new StringBuilder(); for (;;) { E e = it.next(); sb.append(e == this ? "(this Collection)" : e); if (!it.hasNext()) return sb.toString(); } }}不仅达到目的,而且还能学到源码。不过不能乱改,会有意想不到的错误哟。
阅读全文
0 0
- Effective Java 对于所用对象都通用的方法 10.始终要覆盖toString,玩转toString
- Effective Java 对于所用对象都通用的方法 9.覆盖equals时总要覆盖hashCode
- Effective Java 对于所用对象都通用的方法 11.谨慎地覆盖clone
- 10. 【对于所有对象都通用的方法】尽量覆盖toString方法
- Effective Java 对于所用对象都通用的方法 8.覆盖equals时请遵守通用约定.txt
- Effective Java (10) 始终要覆盖toString
- Effective Java读书笔记-始终要覆盖toString
- Effective Java(覆盖equals时总要覆盖hashcode方法、始终要覆盖toString)
- java对象通用方法之覆盖equals时请遵守通用约定、覆盖equals时总要覆盖hashCode、始终要覆盖toString、考虑实现Comparable接口
- effective java(10) 之始终要覆盖toString
- 始终要覆盖toString
- 始终要覆盖toString
- 始终要覆盖toString。
- Effective Java:对于所有的对象都通用的方法
- effective java(对于所有对象都通用的方法)
- Effective Java:对于所有对象都通用的方法
- Effective Java Note(对于所有对象都通用的方法)
- Effective Java:对于所有对象都通用的方法
- quartz详解2:quartz由浅入深
- 个人博客学习说明(转)
- Spring MVC rest接收json中文格式数据显示乱码
- qt批量插入数据
- 单链表的基本操作(创建、插入、删除......)
- Effective Java 对于所用对象都通用的方法 10.始终要覆盖toString,玩转toString
- Ubuntu 16.04 修改时区!
- intent.putExtra()方法参数详解
- quartz详解3:quartz数据库集群-锁机制
- 基于NDK开发完JNI代码后,Android studio中引入对应的so文件的方法
- angular4实战一项目创建
- 使用VMWare WorkStation安装Linux Mint
- Apache Maven 概述、环境配置
- Spring 注释 @Autowired 和@Resource 的区别