Java提高班--注解

注解是一种特殊的接口,为了把注解类型和普通接口类型区分开我们在interface前面添加@符号。

注解其实就在在代码上面添加Tag,注解并不会影响程序的运行。

注解是一种配置机制。

Think in Java中是这样定义注解的:

注解(也被称为元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某个时刻非常方便的使用这些数据。

JavaSE5内置了三种注解,定义在java.lang中:

  • @Override,表示当前的方法定义将覆盖超类中的方法。
  • @Deprecated,表示它注解的元素不推荐使用了,因为它是危险的或者有了更好的实现。
  • @SuppressWarnings,关闭不当的编译器警告信息。
定义注解的时候需要一些元注解(meta-annotation),Java内置了4种元注解,元注解用于注解其他的注解。

@Target表示该注解用于什么地方,可能的ElementType参数有:
TYPE: 类,接口(包括注解类)或enum声明
FIELD:域声明(包括enum实例)
METHOD:方法声明
PARAMETER:参数声明
CONSTRUCTOR:构造器声明
LOCAL_VARIABLE:局部变量声明
ANNOTATION_TYPE:注解类型声明
PACKAGE:包声明
@Retention表示需要在什么级别保存该注解信息,可选的RetentionPolicy参数包括:
SOURCE:注解将被编译器丢弃
CLASS:注解在class文件中可用,但会被VM丢弃
RUNTIME:VM将在运行时也保留注解,因此可以通过反射机制读取注解的信息
@Documented将此注解包含在Javadoc中
@Inherited允许子类继承父类中的注解

简单的自定义注解:

package com.dusk.annoation;

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

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface UseCase {
	public int id();

	public String description() default "no description";
}
注解元素的可用类型有:

  • 所有的基本类型
  • String
  • Class
  • enum
  • Annotation
  • 以上类型的数组

操作注解:

注解其实就是类、枚举、方法、类属性上面的一个标记,只要我们能读到这个标记就可以根据自己的实际应用场景进行相应的处理。

最基础的办法是我们使用Java反射包中自带的获取注解的方法来处理。

例如:

类:

java.lang.Class.getAnnotation(Class<A>)

java.lang.Class.getDeclaredAnnotations()

方法:

java.lang.reflect.Method.getAnnotation(Class<T>)

属性:

java.lang.reflect.Field.getAnnotation(Class<T>)

当然也可以使用apt , javac等

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值