java反射获取方法的参数
Java中的注解到底是如何工作的?
Java中的注解到底是如何工作的?
什么是注解
注解是在Java5.0版本中被引入,其目的是用于描述数据,我们可以把他当作标签,每加上一个注解就相当于给类/方法/字段贴上来标签,而标签的作用我们很明白,通过标签我们可以知道这个类/方法/字段是做什么的。
为什么使用注解
在程序开发中,如果我们看到@Override,我们是很容易理解它的作用就是对实现方法的重写,而这也达到设计之初的目标,即描述数据。
继续以Override为例子,我们在实现父类方法的时候通常会带上该注解,但是我们不带也不会对运行有任何影响,但是如果我们把注解放到非实现的方法上,编译就会报错。也就是说注解会告诉编译我是做什么的,如果我做的和预期不一样,那么编译器会对我们程序进行纠错,即对不合注解含义的业务进行处理(这个处理不是注解去处理,只是看上去像是注解的作用)。
注解如何工作
对于@Override使用在非父类方法上编译报错的情况,我们最初接触的时候可能会认为这些报错的作用是注解的作用,但是实际上并不全是,这是因为注解仅仅是标签亦或者说是元数据。他的作用一开始仅仅是为类描述数据,而后衍生出来的各种功能是由前端编译器在编译成class的时候会有一个专门的注解处理器,是他在编译过程中对诸多注解,如@Override,会有专门的代码完成@Override标志的业务逻辑。简单的说,注解只是标签,而标签具有的功能是由前端编译器
在生成语法树之后有专门的代码去实现。
如果我们有使用自定义注解的经验,我们会发现如果我们单单定义一个注解放在类/方法/字段上,那么它只有一个标签的效果,并没有什么实际的意义,比如我们自定义NotEmpty注解,表达不能为空,我们将其注解加入到字段上,即使传空也没有任何问题,这是因为没有相应业务的支持。如果想要达到想要的效果,我们就需要专门写业务逻辑去实现这个NotEmpty功能
希望我的回答能对您有所帮助。
Java中枚举怎么遍历?
我们可以通过反射, 以及枚举类的静态方法values()来进行遍历:代码:enum Rating { UNRATED, G, PG, PG13, R, NC17 } public class Test { public static void main(String args[]) { (