Android-反射使用

2019-10-09  本文已影响0人  cao苗子
 //反射获取对象
//        TestBean testBean = new TestBean();
        try {
            //只有一个构造函数 并且是空参
//            TestBean testBean = TestBean.class.newInstance();
//            Log.d("TAG-->", testBean.getName());

            //getDeclaredConstructor 获取所有的构造方法 getConstructor 这个是获取公共构造方法
            //多个构造函数 空参
            Constructor<TestBean> declaredConstructor1 = TestBean.class.getDeclaredConstructor();
            //设置成公共方法
            declaredConstructor1.setAccessible(true);
            //获取对象
            TestBean testBean1 = declaredConstructor1.newInstance();

            //多个构造函数 有一个参
            Constructor<TestBean> declaredConstructor2 = TestBean.class.getDeclaredConstructor(String.class);
            //设置成公共方法
            declaredConstructor2.setAccessible(true);
            //获取对象
            TestBean testBean2 = declaredConstructor2.newInstance("我是苗子");

            //带多个参数
            Constructor<TestBean> declaredConstructor3 = TestBean.class.getDeclaredConstructor(String.class,int.class);
            //设置成公共方法
            declaredConstructor3.setAccessible(true);
            //获取对象
            TestBean testBean3 = declaredConstructor3.newInstance("wo shi miaozi",234);

            //获取方法
            //空参
            Method setName = TestBean.class.getDeclaredMethod("setName");
            //设置成公共方法
            setName.setAccessible(true);
            //执行
            setName.invoke(testBean2);

            //有参
            Method setName2 = TestBean.class.getDeclaredMethod("setName",String.class);
            //设置成公共方法
            setName2.setAccessible(true);
            //执行
            setName2.invoke(testBean2,"cao ni ma miao zi");

            //属性获取
            Field field = TestBean.class.getDeclaredField("name");
            field.setAccessible(true);
            String  name = (String) field.get(testBean2);

            Log.d("TAG","name = "+name);

        } catch (Exception e) {
            e.printStackTrace();
        }
上一篇下一篇

猜你喜欢

热点阅读