设计目的:
平时我们调试代码可以使用IDE内置的Debug工具,但有的时候我们可能没有办法利用这些专业的Debug工具进行调试(比如我们自己设计一套监控系统)。于是,我设计了一个可以打印类变量中属性值的Java类,主要利用了Java的反射机制,方便直接调用查看POJO传值是否正确等。更多用途期待大家发现,欢迎交流~
源代码参考:
打印类PrintClass:
package net.im47.utils; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /** * User: siqi * Date: 11-10-31 * Time: 下午10:10 * 该类用于打印类中的所有属性及其类型、值。 */ public class PrintClass { public static DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); public static void print(Object object) { StringBuffer str = new StringBuffer(); str.append("Attribute of instance: " + object.toString() + "\n"); Field[] fields = object.getClass().getDeclaredFields(); for (Field field : fields) { if (field.getName().equals("serialVersionUID") || field.getName().equals("$VALUES")) return; String name = getAttrName(field); String type = getAttrType(field); String value = getAttrValue(object, field, name); str.append("Name:" + name); str.append("\t\tType:" + type); str.append("\t\tValue:" + value); str.append("\n"); } System.out.println(str); } private static String getAttrName(Field field) { return field.getName(); } private static String getAttrType(Field field) { return field.getGenericType().toString(); } private static String getAttrValue(Object object, Field field, String attrName) { try { Method method = object.getClass().getMethod("get" + attrName.substring(0, 1).toUpperCase() + attrName.substring(1)); Class type = method.getReturnType(); Object value = method.invoke(object); if ("java.util.Date".equals(type.toString())) { //dateFormat = DateFormat.getDateInstance(DateFormat.SHORT); //dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM); dateFormat = DateFormat.getDateInstance(DateFormat.FULL); return dateFormat.format(value); } else { print(value); return value.toString(); } } catch (NoSuchMethodException e) { //System.out.println("Error: NoSuchMethod: get" + attrName.substring(0, 1).toUpperCase() + attrName.substring(1)); } catch (InvocationTargetException e) { System.out.println("Error: NoInvocationTarget"); } catch (IllegalAccessException e) { System.out.println("Error: IllegalAccess"); } return ""; } public static void main(String[] args) throws ParseException { Date birthday = dateFormat.parse("1987-08-08"); User user = new User("baitao.jibt", "badsiu129hqw98ed", User.Gender.MALE, 24, birthday, new User.Address("china", "shandong", "jinan")); PrintClass.print(user); } }
待检查类User:
package net.im47.utils; import java.util.Date; /** * User: siqi * Date: 11-10-30 * Time: 下午7:22 */ public class User { private String username; private String password; private Gender gender; private int age; private Date birthday; private Address address; public enum Gender {MALE, FEMALE} ; public User() { } public User(String username, String password, int age) { this.username = username; this.password = password; this.age = age; } public User(String username, String password, Gender gender, int age) { this.username = username; this.password = password; this.gender = gender; this.age = age; } public User(String username, String password, Gender gender, int age, Date birthday, Address address) { this.username = username; this.password = password; this.gender = gender; this.age = age; this.birthday = birthday; this.address = address; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Gender getGender() { return gender; } public void setGender(Gender gender) { this.gender = gender; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } public static class Address { private String country; private String province; private String city; public Address() { } public Address(String country, String city, String province) { this.country = country; this.city = city; this.province = province; } public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } public String getProvince() { return province; } public void setProvince(String province) { this.province = province; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } } }