框架设计的灵魂——反射机制
什么是反射
将类的各个组成部分封装为其他对象的过程就叫做 反射,其中 组成部分 指的是我们类的 成员变量(Field)、构造方法(Constructor)、成员方法(Method)。
使用反射的优缺点
优点
在程序运行过程中可以操作类对象,增加了程序的灵活性;
解耦,从而提高程序的可扩展性,提高代码的复用率,方便外部调用;
对于任何一个类,当知道它的类名后,就能够知道这个类的所有属性和方法;而对于任何一个对象,都能够调用它的一个任意方法。
缺点
性能问题:Java 反射中包含了一些动态类型,JVM 无法对这些动态代码进行优化,因此通过反射来操作的方式要比正常操作效率更低。
安全问题:使用反射时要求程序必须在一个没有安全限制的环境中运行,如果程序有安全限制,就不能使用反射。
程序健壮性:反射允许代码执行一些平常不被允许的操作,破坏了程序结构的抽象性,导致平台发生变化时抽象的逻辑结构无法被识别。
Java的所有对象在编译后都完全能确定类型,因此一个class文件被JVM加载后JVM完全知道它的确切类型。
之所以要用反射,是因为你写了一段代码,比如把一个Map.of("name", "Bob")对象变成一个JavaBean,你只知道这个JavaBean得有一个setName(String)方法,但你不知道它的class类型,因为调用方未知,编译阶段,没有class信息,无法编译setName()方法。