@Target:

   @Target说明了Annotation所修饰的对象范围:Annotation可被用于 packages、types(类、接口、枚举、Annotation类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数)。在Annotation类型的声明中使用了target可更加明晰其修饰的目标。

  作用:用于描述注解的使用范围(即:被描述的注解可以用在什么地方)

 取值(ElementType)有

  1. public enum ElementType {
  2. /**用于描述类、接口(包括注解类型) 或enum声明 Class, interface (including annotation type), or enum declaration */
  3. TYPE,
  4.  
  5. /** 用于描述域 Field declaration (includes enum constants) */
  6. FIELD,
  7.  
  8. /**用于描述方法 Method declaration */
  9. METHOD,
  10.  
  11. /**用于描述参数 Formal parameter declaration */
  12. PARAMETER,
  13.  
  14. /**用于描述构造器 Constructor declaration */
  15. CONSTRUCTOR,
  16.  
  17. /**用于描述局部变量 Local variable declaration */
  18. LOCAL_VARIABLE,
  19.  
  20. /** Annotation type declaration */
  21. ANNOTATION_TYPE,
  22.  
  23. /**用于描述包 Package declaration */
  24. PACKAGE,
  25.  
  26. /**
  27. * 用来标注类型参数 Type parameter declaration
  28. * @since 1.8
  29. */
  30. TYPE_PARAMETER,
  31.  
  32. /**
  33. *能标注任何类型名称 Use of a type
  34. * @since 1.8
  35. */
  36. TYPE_USE

  

  1. ElementType.TYPE_PARAMETER(Type parameter declaration) 用来标注类型参数, 栗子如下:
  1. @Target(ElementType.TYPE_PARAMETER)
  2. @Retention(RetentionPolicy.RUNTIME)
  3. public @interface TypeParameterAnnotation {
  4.  
  5. }
  6.  
  7. // 如下是该注解的使用例子
  8. public class TypeParameterClass<@TypeParameterAnnotation T> {
  9. public <@TypeParameterAnnotation U> T foo(T t) {
  10. return null;
  11. }
  12. }

  ElementType.TYPE_USE(Use of a type) 能标注任何类型名称,包括上面这个(ElementType.TYPE_PARAMETER的),栗子如下:

  1. public class TestTypeUse {
  2.  
  3. @Target(ElementType.TYPE_USE)
  4. @Retention(RetentionPolicy.RUNTIME)
  5. public @interface TypeUseAnnotation {
  6.  
  7. }
  8.  
  9. public static @TypeUseAnnotation class TypeUseClass<@TypeUseAnnotation T> extends @TypeUseAnnotation Object {
  10. public void foo(@TypeUseAnnotation T t) throws @TypeUseAnnotation Exception {
  11.  
  12. }
  13. }
  14.  
  15. // 如下注解的使用都是合法的
  16. @SuppressWarnings({ "rawtypes", "unused", "resource" })
  17. public static void main(String[] args) throws Exception {
  18. TypeUseClass<@TypeUseAnnotation String> typeUseClass = new @TypeUseAnnotation TypeUseClass<>();
  19. typeUseClass.foo("");
  20. List<@TypeUseAnnotation Comparable> list1 = new ArrayList<>();
  21. List<? extends Comparable> list2 = new ArrayList<@TypeUseAnnotation Comparable>();
  22. @TypeUseAnnotation String text = (@TypeUseAnnotation String)new Object();
  23. java.util. @TypeUseAnnotation Scanner console = new java.util.@TypeUseAnnotation Scanner(System.in);
  24. }
  25. }

  

java元注解 @Target注解用法的更多相关文章

  1. Java复习——枚举与注解

    枚举 枚举就是让某些变量的取值只能是若干固定值中的一个,否则编译器就会报错,枚举可以让编译器在编译阶段就控制程序的值,这一点是普通变量无法实现的.枚举是作为一种特殊的类存在的,使用的是enum关键字修 ...

  2. Java基础教程——解析注解

    解析注解 Java 5开始,java.lang.reflect包下的反射API可以在运行时读取Annotation. 应用:定义一个自动执行方法的注解,解析注解.通过反射执行方法,替代配置文件. pa ...

  3. 元注解——java.lang.annotation.Target(1.8)

    参考资料:https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html 普通注解’只能用来注解’代码’,而’元注 ...

  4. Java元注解—— @Retention @Target @Document @Inherited

    java中元注解有四个: @Retention @Target @Document @Inherited: @Retention:注解的保留位置 @Retention(RetentionPolicy. ...

  5. spring boot: Annotation 注解之@Target的用法介绍

    前言 目前,越来越多的架构设计在使用注解,例如spring3.0.struts2等框架.让我们先来看看注解的定义.如下是一段使用了JDK 5 Annotation @Target的代码: @Targe ...

  6. Java元注解,简单案例

    [注解] 程序中有 注释 和注解 * 注释:给开发人员. * 注解:给计算机看的. 注解使用:学习框架支持注解开发. [JDK提供的注解] @Override :描述方法的重写. @SuppressW ...

  7. Java注解Annotation的用法 - 自定义Annotation实现

    Java注解又称Java标注,是Java语言5.0版本开始支持加入源代码的特殊语法元数据. Java语言中的类.方法.变量.参数和包等都可以被标注.和Javadoc不同,Java标注可以通过反射获取标 ...

  8. 使用Java元注解和反射实现简单MVC框架

    Springmvc的核心是DispatcherServlet来进行各种请求的拦截,进而进行后续的各种转发处理.流程图如下: 说明:客户端发出一个http请求给web服务器,web服务器对http请求进 ...

  9. Java之四大元注解@Target、@Retention、@Documented、@Inherited

    什么叫做元注解??   ==>用于注解[注释]的注解就叫做元注解 注解叫做:元数据,标签,注释           元注解[数据]--->注解--->标记代码 1.@Target : ...

随机推荐

  1. 自定义组件的 v-model

    Vue.component('base-checkbox', { model: { prop: 'checked', event: 'change' }, props: { checked: Bool ...

  2. ThreadPoolExecutor使用详解

    ThreadPoolExecutor机制  一.概述 1.ThreadPoolExecutor作为java.util.concurrent包对外提供基础实现,以内部线程池的形式对外提供管理任务执行,线 ...

  3. WPF将数据库和GridView绑定并更改GridView模板

    首先来看一下如何使用GridView,在前台的话代码如下:这里仅仅举出一个例子,GridView是作为子项嵌套在ListView中的,这里的数据源是通过绑定的方式来绑定到GridView中的. < ...

  4. ERP开源框架 + 二次开发平台 介绍

    经历了多年软件开发,深受网络大侠们的资源共享才得以有所成绩, 本人主要是做企业ERP软件,一直有个感受,开发具体某个功能不难,但随着需求的增加,管理庞大的代码却成了最大的问题 而为企业管理所做的开发, ...

  5. 百度/头条合作命中注定!中国新BAT要来了

    据外媒报道,今日头条母公司字节跳动(ByteDace)将为中国互联网传统BAT的格局,带来一些新的活力.这家增速飞快的新闻.视频App“制造者”已经估值高达750亿美元,与三巨头之一的百度平起平坐,后 ...

  6. 使用nexus搭建maven私服教程详解

    私服是什么 私服,私有服务器,是公司内部Maven项目经常需要的东东,不总结一下,不足以体现出重视.Nexus是常用的私用Maven服务器,一般是公司内部使用.下载地址是http://www.sona ...

  7. hdu 4417 Super Mario (主席树)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=4417 题意: 给你段长为n的序列,有q个询问,每次询问区间[l.r]内有多少个数小于等于k 思路: 之前用 ...

  8. day11 map函数

    场景模拟:实现一个列表内所有元素 *2 的效果 普通的实现方式单个列表是可以做到很轻松的实现,但是如果我又多个列表都要这个操作,那每个都操作就会重复代码 ret = [] num_1 = [1,2,1 ...

  9. JavaScript 获得 坐标

    <!DOCTYPE html> <html> <head> <title>location</title> <meta http-eq ...

  10. BZOJ 1195: [HNOI2006]最短母串

    1195: [HNOI2006]最短母串 Time Limit: 10 Sec  Memory Limit: 32 MBSubmit: 1346  Solved: 450[Submit][Status ...