利用Java反射机制实现toString方法

【目的】 项目中往往会采用toString()方法查看某个对象是否与预期内容一致,而默认的toString方法,只能输出对象的签名而非其真实内容。利用JAVA的反射机制,在基类中实现一个toString()方法,从而如果有其他的类定义继承这个基类的时候,可以自动继承toString()方法并输出内容。

 

【逻辑实现】

@SuppressWarnings("unchecked")
    public String toString() {
        StringBuffer sb = new StringBuffer();
        sb.append(this.getClass().getName() + ": ");
        Field[] fields = this.getClass().getDeclaredFields();
        Class thisClass = this.getClass();
        for (int i = 0; i < fields.length; ++i) {
            Field field = fields[i];
            String fieldName = field.getName();
            String getMethod = "get" + fieldName.substring(0,1).toUpperCase()
                    + fieldName.substring(1);
            try {
                Method thisMethod = thisClass.getMethod(getMethod, new Class[] {});
                sb.append(fieldName + "=" + thisMethod.invoke(this, new Object[] {}) + ", ");
            } catch (Exception e) {
                sb.append(getMethod + " is not exist, ");
            }
        }
        return sb.toString();
    }

 

【简单说明】

1. 利用Java的反射机制,我们可以取到Java类的名称、Java类中所拥有的成员变量和成员函数等,并可以在外部调用这些函数。

2. Java Bean中都会对成员变量增加set/get方法,而这些方法的命名方式遵循一定的规律,借助这些规律,可以完成以上方法调用。

posted @ 2014-12-04 11:53  youwc  阅读(520)  评论(0)    收藏  举报