反射做通用框架

反射做通用框架,第1张

反射概述

l 反射是指对于任何一个 Class 类,在"运行的时候"都可以直接得到这个类全部成分。 l 在运行时,可以直接得到这个类的构造器对象 Constructor l 在运行时,可以直接得到这个类的成员变量对象 Field l 在运行时,可以直接得到这个类的成员方法对象 Method l 这种运行时动态获取类信息以及动态调用类中成分的能力称为 Java 语言的反射机制。 1. 反射的作用? l 可以在运行时得到一个类的全部成分然后 *** 作。 l 可以破坏封装性。(很突出) l 也可以破坏泛型的约束性。(很突出) l 更重要的用途是适合:做Java高级框架 l 基本上主流框架都会基于反射设计一些通用技术功能。

反射的关键:

l 反射的第一步都是先得到编译后的 Class 类对象, 然后 可以得到 Class 的全部成分。 推荐3种方式 forName   类名.class    对象.getClass l 方式一: Class c1 = Class.forName (“ 全类名 ”); l 方式二: Class c2 = 类名 .class l 方式三: Class c3 = 对象 . getClass (); l 反射的第一步是先得到类对象,然后从类对象中获取类的成分对象。 l Class 类中用于获取构造器的方法

Constructor[] getConstructors​()

返回所有构造器对象的数组(只能拿public的)

Constructor[] getDeclaredConstructors​()

返回所有构造器对象的数组,存在就能拿到

Constructor getConstructor​(Class... parameterTypes)

返回单个构造器对象(只能拿public的)

Constructor getDeclaredConstructor​(Class... parameterTypes)

返回单个构造器对象,存在就能拿到

使用反射技术获取成员变量对象并使用

Field[] getFields​()

返回所有成员变量对象的数组(只能拿public的)

Field[] getDeclaredFields​()

返回所有成员变量对象的数组,存在就能拿到

Field getField​(String name)

返回单个成员变量对象(只能拿public的)

Field getDeclaredField​(String name)

返回单个成员变量对象,存在就能拿到

反射的作用-绕过编译阶段为集合添加数据

反射是作用在运行时的技术,此时集合的泛型将不能产生约束了,此时是可以为集合存入其他任意类型的元素

ArrayList<Integer> list = new ArrayList<>();
list.add(100);
list.add(99);

泛型只是在编译阶段可以约束集合只能 *** 作某种数据类型,在 编译成 Class 文件进入运行阶段 的时候,其真实类型都是 ArrayList 了,泛型相当于被擦除了。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/740558.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-28
下一篇 2022-04-28

发表评论

登录后才能评论

评论列表(0条)

保存