以下注解都是 Annotation 接口的实现
标注 | 说明 |
---|---|
@Deprecated | 所标注内容,不再被建议使用。 |
@Override | 只能标注方法,表示该方法覆盖父类中的方法。可以检查方法是否写错 |
@Documented | 所标注内容,可以出现在javadoc中。 |
@Inherited | 只能被用来标注“Annotation类型”,它所标注的Annotation具有继承性。 |
@Retention | 只能被用来标注“Annotation类型”,用来指定Annotation的RetentionPolicy属性。 |
@Target | 只能被用来标注“Annotation类型”,用来指定Annotation的ElementType属性。 |
@SuppressWarnings | @SuppressWarnings 所标注内容产生的警告,编译器会对这些警告忽略。 |
@注解名称(属性:属性值)
@interface 注解名
@interface MyAnno1 {
}
// 作用在包上,先不讲
package com.rlk.anotation;
@MyAnno1 //作用在类上
public class Demo1 {
@MyAnno1 //作用在:成员变量
private String name;
@MyAnno1 //作用在:构造方法
public Demo1() {
}
@MyAnno1 //作用在:方法
public void fun1() {
}
public void fun2(@MyAnno1 String name) { //作用在:形参
@MyAnno1 // //作用在:局部变量上
String username = "hello";
// 错误:不能作用在方法或者属性的调用上
Demo1 demo1 = new Demo1();
@MyAnno1 // 错误
demo1.属性;
@MyAnno1 // 错误
demo1.方法
}
}
在使用注解的时候,可以给你指定属性值。
要指定什么样的值,以及如何如指定,必须看这个属性在定义注解的时候怎么去定义的。
属性类型 属性名()
@interface MyAnno1 {
int age(); //age属性
String name(); //name属性
}
@interface MyAnno1 {
int a();
String b();
MyEnum1 c();
Class d();
MyAnno2 e();
int[] f();
}
@interface MyAnno2 {
int age() default 100; // 注解属性的默认值
String name();
}
@MyAnno2(name="liSi") // 使用注解、属性
public class Demo2 {
...
}
values
属性特权@interface MyAnno3 {
int value();
}value
的时候,在使用的时候赋值,直接写值即可。@MyAnno3(100)
public class Demo2 {
}
@Target
某个或某些
作用目标上@Target(value={ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
@interface MyAnno1 {
...
}@Target
@Target
,用来表明该注解可以用在一个过几个地方,有所限制@MyAnno1
注解由 @Target 指定,只能作用在类、方法、属性上java.lang.Override.java
// 这个@Target添加在Override的注解定义上,那么Target的属性值是什么呢,去定义的地方看看
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}
java.lang.annotation.Target.java
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
ElementType[] value(); // Target注解的属性类型:为枚举类型数组
}
java.lang.annotation.ElementType
public enum ElementType {
TYPE, /** Class, interface (including annotation type), or enum declaration */
FIELD, /** Field declaration (includes enum constants) */
METHOD, /** Method declaration */
PARAMETER, /** Formal parameter declaration */
CONSTRUCTOR, /** Constructor declaration */
LOCAL_VARIABLE, /** Local variable declaration */
ANNOTATION_TYPE, /** Annotation type declaration */
PACKAGE, /** Package declaration */
TYPE_PARAMETER, /** Type parameter declaration */
TYPE_USE /** Use of a type */
}
@Retention
java.lang.annotation.Retention.java
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION\_TYPE)
public @interface Retention { // 定义@Retention注解
RetentionPolicy value(); // 属性 enum RetentionPolicy 类型
}
@Retention
,保留默认
:注解在源代码中存在,然后编译时会把注解信息放到了class文件,但JVM在加载类时,会忽略注解!java.lang.annotation.RetentionPolicy.java
public enum RetentionPolicy {
SOURCE,
CLASS,
RUNTIME
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。