理解JAVA反射,注解,泛型,三体
简述
在学习了这三大模块之后,我觉得有必要梳理一下,因为这三个模块是绑在一起的,可以称为三体了,当然java体系本来就是彼此有关联的,但是这三个模块放在一起看,就显得彼此是多么的重要,可以达到1+1+1>3的效果。
概念
在这里还是需要把各自的概念描述一下:
反射:就是反过来获取类的信息。以前都是java文件最后生成class文件,现在反过来,在有Class对象的前提下,获取整个类的信息。
泛型 :在不知道要操作什么数据类型的时候,用它代替。像装数据的容器数组,集合等,或者即将操作的对象,都不清楚时,用它代替。
注解:注解就类似一个标签,给字段,方法,类,或者给注解本身,做一个标记。
关联
为什么会说这三者是三体为一体呢?
因为注解跟泛型,都在反射机制下大放光彩。
对反射而言,就是给我字节码的Class对象,我就可以给你关于这个类的所有信息,这是一个简单而粗暴的协议。那为什么要跟注解以及泛型扯上关系呢?
我们使用注解时,只是在这个运用的对象,做一个标记。而这个标记并不会影响程序本身,也就是说去掉注解,程序还是可以运行的。
在这个注解做了作用域限制之后,我们就可以根据这个限制去获取这个注解需要注入操作对象的数据,而重点是在于我们该怎么获取这个数据呢?
这时候,反射就上场了。反过来获取操作对象的数据,再去获取贴在这个操作对象的标签的数据,也就是这个注解的数据。注解是给编译器或者APT操作的,所以在这里运用这个反射。
泛型是在我们不清楚该操作的是什么时,它就上场了。
泛型+反射
比如说:我们在使用反射时不知道要返回什么对象,可以使用泛型通配,就类似这样,给我传入一个字节码,就返回一个对象给你。不需要强转,不需要判断,简洁而有效。
重中之重还是在反射,反射是非常规的操作,是倒过来的操作方式,而注解,泛型,也是在最后初始化的时候才会清楚的告诉你,这个是什么类型,所以反射跟注解,跟泛型,就能够完美的配合在一起~~