美文网首页
反射机制(reflect)

反射机制(reflect)

作者: 一条小团团OvO | 来源:发表于2019-07-27 10:46 被阅读0次

一.反射机制用来描述所有的类
Class 用来类描述类本身
Package 用来描述类所属的包
Field 用来描述类的属性
Method 用来描述类的方法
Constructor 用来描述类的构造方法
Annotation 用来描述类中的注解
1.如何获取class
三种方式:
Class clazz=class.forName("包名.类名")
Class clazz=类名.class
xx对象.getClass();object类中的方法
2.常用方法
modifiers();获取修饰符,0代表默认不写,1代表public 4.protected ...等等
package reflect;
3.field的常用方法

import java.lang.reflect.Field;
public class test {
    public static void main(String[] args) {
        try {
            Class clazz=Class.forName("reflect.person");
            String name=clazz.getName();//获取类名
            System.out.println(name);
            String simplename=clazz.getSimpleName();
            System.out.println(simplename);
            Class parClazz=clazz.getSuperclass();//获取继承的父类
            Class[] cc=clazz.getInterfaces();//获取实现的接口
            System.out.println(parClazz.getName());
            Package p=clazz.getPackage();
                    p.getName();
                    //通过反射创建对象;
            try {
                   
                person person=(person) clazz.getDeclaredConstructor().newInstance(); //JDK9推荐这个方法了

            }catch (Exception e){
                e.printStackTrace();
            }

            try {
                Field field=clazz.getField("name");//获取属性
                int mod=field.getModifiers();//获取修饰符
                Field[] fields=clazz.getFields();//获取所有的属性
                Class cl=field.getType();//获取数据类型
                //如上的两个方法,不能获取私有的属性,但是可以获取继承的属性
                Field ff=clazz.getDeclaredField("name");//获取私有属性
                ff.setAccessible(true);//表示私有属性可被操作
            } catch (NoSuchFieldException e) {
                e.printStackTrace();
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

4.获取类中的方法
Method m=clazz.getMethod("eat")
5.设计一个方法,传入字符串,创建对象IOC(Inversion Of Control)控制反转 DI(依赖注入)自动注入
属性,DI是IOC的一个体现,先要有IOC;

package reflect;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class CreateObject {
    /**
     * 设计一个方法,传入字符串,创建对象
     * IOC思想
     * DI依赖注入
     */
    //是否需要参数
    //是否需要返回值
    public Object getBean(String className){
        Object object=null;
        try {
                Class clazz=Class.forName(className);
                //创建对象
                  object=clazz.getDeclaredConstructor().newInstance();
                  //这里做一个DI,自动注入属性
            //通过clazz获取所有私有属性---->通过属性获取属性名---->通过属性名获取set名
            Field[] fields=clazz.getFields();
            for (Field field:fields) {
               //获取属性名
               String fieldName=field.getName();
               //手动拼接字符串,拼接属性对应的set方法名,StringBuilder性能比String拼接好;
                StringBuilder setMethodName=new StringBuilder("set");
                setMethodName.append(fieldName.substring(0,1).toUpperCase());//属性首字母大写拼接
                setMethodName.append(fieldName.substring(1));//其余部分拼接
                //获取field对应的属性类型
                Class fieldType=field.getType();
                //获取set方法
                Method method=clazz.getMethod(setMethodName.toString(),fieldType);
                String value="";//这个是需要赋的值,是从配置文件或其他地方得来的
                Constructor con=fieldType.getConstructor(String.class);//通过包装类的String构造方法
                method.invoke(object,con.newInstance(value));//将String转成属性的类型
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        return object;
    }
}

相关文章

  • ES6(十二)—— Reflect

    Reflect 反射,什么是反射机制? Reflect简介 为什么要用Reflect? Reflect API.a...

  • 反射机制(reflect)

    一.反射机制用来描述所有的类Class 用来类描述类本身Package 用来描述类所属的包Field 用来描述类的...

  • reflect使用

    reflect概述 反射是一种检查存储在 接口变量中的<值,类型>对 的机制,借助go反射包提供的reflect....

  • Java基础之反射

    Java-Reflect Class类的使用 方法的反射 成员变量的反射 构造函数的反射 Java类加载机制 一、...

  • Java Reflect 反射机制

    Java Reflect 反射机制 类字节码文件是在硬盘上存储的,是一个个的.class文件。我们在new一个对象...

  • [JAVA学习笔记] 反射机制

    [JAVA学习笔记] 反射机制 Java的反射通过Class类和java.lang.reflect类库实现。通过它...

  • Java Reflect(反射)机制详解

    Java Reflect(反射)机制详解 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法...

  • go 的反射 reflect

    Golang语言实现了反射,反射机制就是在运行时动态的调用对象的方法和属性,官方自带的reflect包就是反射相关...

  • Go的reflect机制和reflect包

    reflect反射

  • 33-reflect反射

    reflect反射 对编程语言比较熟悉的同学,应该听说过“反射”这个机制。Python作为一门动态语言,当然不会缺...

网友评论

      本文标题:反射机制(reflect)

      本文链接:https://www.haomeiwen.com/subject/wubalctx.html