源碼如下:
@Target({ElementType.PARAMETER}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface RequestParam { @AliasFor("name") String value() default ""; @AliasFor("value") String name() default ""; boolean required() default true; String defaultValue() default "\n\t\t\n\t\t\n\ue000\ue001\ue002\n\t\t\t\t\n"; }
由此可以看出,name的別名為value,value的別名為name 所以兩者等同。
@AliasFor 給屬性加別名
// value 的別名為attribute, attribute的別名為value
public @interface AliasFor { @AliasFor("attribute") String value() default ""; @AliasFor("value") String attribute() default ""; Class<? extends Annotation> annotation() default Annotation.class; }
還能看出, 定義別名必須互為別名,你等於我我等於你