举个例子,我们找一个swagger包下经常用到的注解@ApiModelProperty,例如:
我们会直接这样写,那么赋的这个值"测试名称"是代表什么含义呢?它赋的这个值是属于哪一个变量?
我们点进去看看这个注解ApiModelProperty,这个注解里面这么多变量,那么我刚刚这样直接写值"测试名称"是赋值给哪一个变量,是value?还是name?还是?
那么这时候我们其实可以验证一下,我们也创建一个自定义注解类,假如叫:CusAnnotation
然后也添加几个变量,直接在某个测试类比如:CusAnnotationTest声明一个字段username,直接用上该注解,然后赋值一个值,假如是下面这样叫做"张三"
那么这时候我们应该如何知道获取username字段上的注解的值"张三"是属于哪个变量?
答:反射。
现在我们创建一个main方法,然后使用反射技术,去获取username这个字段先,然后再获取字段上的注解@CusAnnotation,我们逐个去获取注解@CusAnnotation的变量的值,看看这个值对应的是哪一个变量,我们就知道这个"张三"的值是属于哪一个变量。
运行结果:
我们看运行结果,所以这个张三的值代表的是注解@CusAnnotation变量value的值,所以如果我们以后看到一些注解,直接赋值一个字符串,没有写变量,那么我们可以肯定,这个注解一定包含一个value变量,因为只有包含变量value,才能直接省略变量赋值字符串。
假如我现在将@CusAnnotation注解的变量value注释掉,我们看看直接这样赋值字符串是否可以。
这时候我们发现,注解就报错了。
也就是说如果你要直接省略赋值字符串,必须包含value变量。否则是不能这样写的。
那么假如我现在将注释重新放开,然后我在注解括号里面将value变量省略,然后将messgae赋值为"testMsg",你们觉得怎么写?可以这样写嘛?
@CusAnnotation("张三",message="testMsg")嘛?
我们通过代码验证一下
确实报错了,说注解的属性必须是name=value这种键值对的形式,所以也就是说
如果要省略直接赋值,那么必须注解中包含变量value,但是这种省略的情况在>1个变量的时候,就不能省略了,还是得老老实实把变量名写上。
总结:
注解括号里面,不注明变量,直接赋值字符串,这个值代表的是注解中变量value的值,而且也只能是value,因为如果注解中没有声明变量value的话,也不可以直接赋值,当出现在注解的括号中声明超过1个变量的时候,就不能省略value了,必须按照"name=value"键值对的方式存在了。
最后:
如果这篇文章对你们有所帮助的话,麻烦给个免费的赞赞,同时也祝各位码农在IT的道路上高歌猛进!谢谢支持!