zoukankan      html  css  js  c++  java
  • 利用反射重写toString()方法

    为了方便输出对象,Object类提供了toString()方法。但是该方法的默认值是由类名和哈希码组成的,实用性并不强。通常需要重写该方法以提供更多的信息。本实例使用反射输出类的包、类的名字、类的公共构造方法、类的公共域和类的公共方法。在重写不同类的toString()方法时调用该方法就可以避免多次重写toString()方法。实例运行效果如图

    编写类StringUtils,在该类中定义了两个方法:toString()方法用于输出类的公共方法、域等信息,main()方法用来进行测试。代码如下:

    package com.mingrisoft.reflection;
    
    import java.lang.reflect.Constructor;
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    import java.lang.reflect.Modifier;
    
    public class StringUtils {
        @SuppressWarnings("unchecked")
        public String toString(Object object) {
            Class clazz = object.getClass();// 获得代表该类的Class对象
            StringBuilder sb = new StringBuilder(); // 利用StringBuilder来保存字符串
            Package packageName = clazz.getPackage(); // 获得类所在的包
            sb.append("包名:" + packageName.getName() + "	");// 输出类所在的包
            String className = clazz.getSimpleName(); // 获得类的简单名称
            sb.append("类名:" + className + "
    "); // 输出类的简单名称
            sb.append("公共构造方法:
    ");
            // 获得所有代表构造方法的Constructor数组
            Constructor[] constructors = clazz.getDeclaredConstructors();
            for (Constructor constructor : constructors) {
                String modifier = Modifier.toString(constructor.getModifiers());// 获得方法修饰符
                if (modifier.contains("public")) {// 查看修饰符是否含有“public”
                    sb.append(constructor.toGenericString() + "
    ");
                }
            }
            sb.append("公共域:
    ");
            Field[] fields = clazz.getDeclaredFields();// 获得代表所有域的Field数组
            for (Field field : fields) {
                String modifier = Modifier.toString(field.getModifiers());
                if (modifier.contains("public")) {// 查看修饰符是否含有“public”
                    sb.append(field.toGenericString() + "
    ");
                }
            }
            sb.append("公共方法:
    ");
            Method[] methods = clazz.getDeclaredMethods();// 获得代表所有方法的Method[]数组
            for (Method method : methods) {
                String modifier = Modifier.toString(method.getModifiers());
                if (modifier.contains("public")) {// 查看修饰符是否含有“public”
                    sb.append(method.toGenericString() + "
    ");
                }
            }
            return sb.toString();
        }
        
        public static void main(String[] args) {
            System.out.println(new StringUtils().toString(new Object()));
        }
    }

    心法领悟:简化toString()方法的重写。

    toString()在编写类时基本都需要重写,对于高手而言,可以使用反射来自定义需要的输出结果。对于日常开发,推荐大家使用Commons Lang组件提供的工具类来重写该方法。

  • 相关阅读:
    最新Sublime Text 2 激活 汉化
    深入理解JPEG图像格式Jphide隐写
    入CTF坑必不可少的地方-保持更新
    v0lt CTF安全工具包
    浅析弱口令
    尽最大可能分析上传源码及漏洞利用方式
    最新Internet Download Manager (IDMan) 6.25 Build 20 32位 64位注册破解补丁
    c# double保留2位小数
    VS2010 & Visual Assist X 的配合
    C#的回调被C++调用
  • 原文地址:https://www.cnblogs.com/mrxy/p/6742112.html
Copyright © 2011-2022 走看看