自定义注解

定义语法

注解语法结构:

[public] @interface 注解名 {
	[属性1;]
	[属性2;]
	...
	[属性n;]
}

属性语法结构:

数据类型 属性名() [default 默认属性值];

示例

public @interface TestAnnotation {
	String value();
}

修饰自定义注解的元注解

@Target

用于指定被修饰的自定义注解只能用于修饰程序中哪些元素,该元注解有如下常用属性值:

  1. ElementType.METHOD:应用于方法

定义如下注解:

import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
public @interface TestAnnotation {
	
}

test类:

在这里插入图片描述
显然在类之前和在属性之前的注解报错。

  1. ElementType.TYPE:应用于类、接口或者枚举声明

定义如下注解:

import java.lang.annotation.ElementType;
import java.lang.annotation.Target;

@Target({ElementType.TYPE,ElementType.METHOD})
public @interface TestAnnotation {
	
}

test类:
在这里插入图片描述
显然在类之前的注解不在报错,而属性之前的注解依然报错。

  1. ElementType.FIELD:应用于全局属性

定义如下注解

import java.lang.annotation.ElementType;
import java.lang.annotation.Target;

@Target({ElementType.FIELD,ElementType.TYPE,ElementType.METHOD})
public @interface TestAnnotation {
	
}

test类:
在这里插入图片描述
不再报错。

@Retention

用于指定被修饰的自定义注解可以保留多久,该元注解有如下属性值:

  1. RetentionPolicy.SOURCE:编译器将直接丢弃被修饰的注解。
    我们可以通过使用Test类的Class对象来获取对Test类的注解。
import java.lang.annotation.Annotation;

@TestAnnotation
public class Test {
	
	public static void main(String[] args) {
		Class clazz = Test.class;
		Annotation[] annotations = clazz.getAnnotations();
		if(annotations.length==0) {
			System.out.println("注解未获取");
		}
		for (Annotation annotation : annotations) {
			System.out.println(annotation.toString());
		}
	}
}

执行结果:
在这里插入图片描述

  1. RetentionPolicy.CLASS:默认值,编译器将把注解记录在class文件中,当运行Java程序时,虚拟机不再保留注解;

设置自定义注解@Retention(RetentionPolicy.CLASS)
执行结果显然和之前一样:
在这里插入图片描述

  1. RetentionPolicy.RUNTIME:编译器将把注解记录在class文件中,当运行java程序时,虚拟机保留注解,程序可以通过反射获取该注解;

设置自定义注解@Retention(RetentionPolicy.RUNTIME)
执行结果:
在这里插入图片描述

@Documented

执行javadoc命令时,被该元注解修饰的自定义注解也会生成在文档中

//自定义注解
import java.lang.annotation.Documented;

@Documented
public @interface TestAnnotation {
	
}
//Test类
@TestAnnotation
public class Test {
	
}

操作过程:
首先点解Export导出,搜索javadoc,点击next在这里插入图片描述
选择注解java项目点击next
在这里插入图片描述
直到出现下图界面,在箭头框内输入-encoding UTF-8 -charset UTF-8,此步骤可以导出有中文注释的java项目,若没有中文注释直接finish就行。
在这里插入图片描述
查看文档:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值