zoukankan      html  css  js  c++  java
  • java

    测试类:

    public class Test01 {
    
        private String name;
        private String sex;
        private Long num;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getSex() {
            return sex;
        }
    
        public void setSex(String sex) {
            this.sex = sex;
        }
    
        public Long getNum() {
            return num;
        }
    
        public void setNum(Long num) {
            this.num = num;
        }
    
    }
    View Code

    1、获取对象字段

    public class Test05 {
    
        public static void main(String[] args) {
            List<String> fieldList = getClassFields(new Test01().getClass());
            for (String field : fieldList) {
                System.out.println(field);
            }
        }
        
        /**
         * 获取字段列表
         * @param clazz 类
         * @return
         */
        private static List<String> getClassFields(Class<?> clazz){
            Field[] fieldArr  = clazz.getDeclaredFields();
            List<String> fieldList = new ArrayList<String>();
            for (Field field : fieldArr) {
                fieldList.add(field.getName());
            }
            return fieldList;
        }
    }

    运行main方法结果:

    2、字段类型

        /**
         * 测试字段类型
         */
        private static void testFieldType(Class<?> clazz){
            Field[] fieldArr  = clazz.getDeclaredFields();
            for (Field field : fieldArr) {
                System.out.println(field.getType());
            }
        }

    测试结果:

    3、字段类型比较

        /**
         * 测试字段类型
         */
        private static void test03(Class<?> clazz){
            Field[] fieldArr  = clazz.getDeclaredFields();
            for (Field field : fieldArr) {
                if(field.getType().equals(Long.class))
                    System.out.println("Long类型,字段:"+field.getName());
                else if(field.getType().equals(String.class))
                    System.out.println("String类型,字段:"+field.getName());
            }
        }

    运行结果:

    4、获取类指定字段值

        /**
         * 获取字段值, get方法
         * @param thisClass 类
         * @param fieldName 字段名
         * @return
         */
        private static Object getFieldValue(Object thisClass, String fieldName) {
            Object value = new Object();
            Method method = null;
            try {
                String methodName = fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);
                method = thisClass.getClass().getMethod("get" + methodName);
                value = method.invoke(thisClass);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return value;
        } 
        /**
         * 测试指定字段值
         * @param clazz
         */
        private static void test05(Object obj, String[] fieldArr){
            for (String fieldName : fieldArr) {
                System.out.println("字段:"+ fieldName +", 值:"+ getFieldValue(obj, fieldName));
            }
        }
        public static void main(String[] args) {
            Test01 test = new Test01();
            test.setName("1");
            test.setSex("2");
            test.setNum(1000L);
            
            String[] fieldArr = new String[]{"name", "sex", "num"};
            test05(test, fieldArr);
        }

    运行结果:

    5、通过反射设置值

        /**
         * 测试反射设置属性
         * @param obj
         */
        private static Object test06(Object obj) throws Exception{
            Class<?> clazz = obj.getClass(); //
            Field[] fieldArr  = clazz.getDeclaredFields();
            
            Object clazzInstance = clazz.newInstance(); // 实例化对象
            for (Field field : fieldArr) {
                field.setAccessible(true); // 设置些属性是可以访问的
                String fieldName = field.getName(); // 字段名称
                Class<?> fieldType = field.getType(); // 字段类型
                
                if (fieldType == Long.class) // long类型只能set数字,不然报错
                    field.set(clazzInstance, 88888L);
                else if (fieldType == String.class)
                    field.set(clazzInstance, "我是属性【"+ fieldName +"】");
            }
            return clazzInstance;
        }
        public static void main(String[] args) throws Exception {
            Object obj = test06(new Test01());
            Test01 test = (Test01) obj;
            System.out.println("name: "+ test.getName() +", sex: "+ test.getSex() +", num: "+ test.getNum());
        }

    运行结果:

    大武汉,赶最后一班地铁去喽。 。。 香港路转范湖,范湖转光谷,漫长。。。。。

  • 相关阅读:
    公平锁,非公平锁,乐观锁,悲观锁
    需求分析
    需求的获取渠道
    php将中文字符串分割为数组
    面试题
    ecshop中错误
    应用上线前必须进行的10个QA测试
    资料1
    tp数据库配置
    Web开发思路
  • 原文地址:https://www.cnblogs.com/frank-quan/p/5998527.html
Copyright © 2011-2022 走看看