• Java反射理解(四)-- 获取成员变量构造函数信息


    Java反射理解(四)-- 获取成员变量构造函数信息

    步骤

    获取成员变量信息:
    1. obj.getClass() 获取类类型对象
    2. 成员变量也是对象,java.lang.reflect.Field 类中封装了关于成员变量的操作:
      • getFields() 方法获取的是所有的public的成员变量的信息
      • getDeclaredFields() 获取的是该类自己声明的成员变量的信息
    3. getType() 得到成员变量的类型的类类型
    4. getName() 得到成员变量的名称
    获取成员变量构造函数信息:
    1. obj.getClass() 获取类类型
    2. 构造函数也是对象,java.lang. Constructor 中封装了构造函数的信息:
      • getConstructors() 获取所有的public的构造函数
      • getDeclaredConstructors() 得到所有的构造函数
    3. getName() 得到构造函数名称
    4. getParameterTypes() 获取参数列表类类型

    举例

    1. 获取成员变量的信息
    public class ClassUtil {
    	/**
         * 获取成员变量的信息
         * @param obj
         */
    	public static void printFieldMessage(Object obj) {
    		Class c = obj.getClass();
    		/*
    		 * 成员变量也是对象
    		 * java.lang.reflect.Field
    		 * Field类封装了关于成员变量的操作
    		 * getFields()方法获取的是所有的public的成员变量的信息
    		 * getDeclaredFields获取的是该类自己声明的成员变量的信息
    		 */
    		//Field[] fs = c.getFields();
    		Field[] fs = c.getDeclaredFields();
    		for (Field field : fs) {
    			//得到成员变量的类型的类类型
    			Class fieldType = field.getType();
    			String typeName = fieldType.getName();
    			//得到成员变量的名称
    			String fieldName = field.getName();
    			System.out.println(typeName+" "+fieldName);
    		}
    	}
    }
    

    测试:

    public class ClassDemo4 {
    	public static void main(String[] args) {
    		ClassUtil.printFieldMessage("hello");
            System.out.println("==========");
            ClassUtil.printFieldMessage(new Integer(1));
    	}
    }
    
    2. 获取成员变量构造函数的信息
    public class ClassUtil {
    	/**
    	 * 打印对象的构造函数的信息
    	 * @param obj
    	 */
    	public static void printConMessage(Object obj){
    		Class c = obj.getClass();
    		/*
    		 * 构造函数也是对象
    		 * java.lang. Constructor中封装了构造函数的信息
    		 * getConstructors获取所有的public的构造函数
    		 * getDeclaredConstructors得到所有的构造函数
    		 */
    		//Constructor[] cs = c.getConstructors();
    		Constructor[] cs = c.getDeclaredConstructors();
    		for (Constructor constructor : cs) {
    			System.out.print(constructor.getName()+"(");
    			//获取构造函数的参数列表--->得到的是参数列表的类类型
    			Class[] paramTypes = constructor.getParameterTypes();
    			for (Class class1 : paramTypes) {
    				System.out.print(class1.getName()+",");
    			}
    			System.out.println(")");
    		}
    	}
    }
    

    测试:

    public class ClassDemo5 {
    	public static void main(String[] args) {
    		ClassUtil.printConMessage("hello");
            ClassUtil.printconMessage(new Integer(1));
    	}
    }
    

    完。

  • 相关阅读:
    Tensorflow API解读
    《deep learning book》-- 引言
    算法导论--第一部分(基础知识)
    leetcode解题笔记--part1--array
    TensorFlow实战--阅读笔记part4
    TensorFlow实战--阅读笔记part3
    Pro Git阅读笔记--part1
    TensorFlow实战--阅读笔记part2
    周长最长分析
    VC维含义的个人理解
  • 原文地址:https://www.cnblogs.com/weixuqin/p/11220743.html
Copyright © 2020-2023  润新知