java元注解 @Target注解用法

@Target:

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

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

 取值(ElementType)有

public enum ElementType {
    /**用于描述类、接口(包括注解类型) 或enum声明 Class, interface (including annotation type), or enum declaration */
    TYPE,

    /** 用于描述域 Field declaration (includes enum constants) */
    FIELD,

    /**用于描述方法 Method declaration */
    METHOD,

    /**用于描述参数 Formal parameter declaration */
    PARAMETER,

    /**用于描述构造器 Constructor declaration */
    CONSTRUCTOR,

    /**用于描述局部变量 Local variable declaration */
    LOCAL_VARIABLE,

    /** Annotation type declaration */
    ANNOTATION_TYPE,

    /**用于描述包 Package declaration */
    PACKAGE,

    /**
     * 用来标注类型参数 Type parameter declaration
     * @since 1.8
     */
    TYPE_PARAMETER,

    /**
     *能标注任何类型名称 Use of a type
     * @since 1.8
     */
    TYPE_USE

  

ElementType.TYPE_PARAMETER(Type parameter declaration) 用来标注类型参数, 栗子如下:
@Target(ElementType.TYPE_PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface TypeParameterAnnotation {

}

// 如下是该注解的使用例子
public class TypeParameterClass<@TypeParameterAnnotation T> {
    public <@TypeParameterAnnotation U> T foo(T t) {
        return null;
    }
}

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

public class TestTypeUse {

    @Target(ElementType.TYPE_USE)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface TypeUseAnnotation {

    }

    public static @TypeUseAnnotation class TypeUseClass<@TypeUseAnnotation T> extends @TypeUseAnnotation Object {
        public void foo(@TypeUseAnnotation T t) throws @TypeUseAnnotation Exception {

        }
    }

    // 如下注解的使用都是合法的
    @SuppressWarnings({ "rawtypes", "unused", "resource" })
    public static void main(String[] args) throws Exception {
        TypeUseClass<@TypeUseAnnotation String> typeUseClass = new @TypeUseAnnotation TypeUseClass<>();
        typeUseClass.foo("");
        List<@TypeUseAnnotation Comparable> list1 = new ArrayList<>();
        List<? extends Comparable> list2 = new ArrayList<@TypeUseAnnotation Comparable>();
        @TypeUseAnnotation String text = (@TypeUseAnnotation String)new Object();
        java.util. @TypeUseAnnotation Scanner console = new [email protected] Scanner(System.in);
    }
}

  

原文地址:https://www.cnblogs.com/unknows/p/10261539.html

时间: 2024-10-07 23:17:36

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

Java复习——枚举与注解

枚举 枚举就是让某些变量的取值只能是若干固定值中的一个,否则编译器就会报错,枚举可以让编译器在编译阶段就控制程序的值,这一点是普通变量无法实现的.枚举是作为一种特殊的类存在的,使用的是enum关键字修饰 枚举常量 枚举常量默认都是使用static final修饰的,所以语法建议使用大写,一个枚举类在第一次被实例化的时候,这些常量就会被创建,这些常量都是枚举类子类的对象 public enum WeekDay{ //每一个枚举的元素(枚举常量)就是一个枚举类子类的对象,是使用static fina

Java元注解,简单案例

[注解] 程序中有 注释 和注解 * 注释:给开发人员. * 注解:给计算机看的. 注解使用:学习框架支持注解开发. [JDK提供的注解] @Override :描述方法的重写. @SuppressWarnings :压制警告. @Deprecated :标记过时. 自定义注解: 定义一个类:class 定义一个借口:interface 定义一个枚举:enum 定义一个注解:@interface 用法: @interface MyAnno1{ } 带有属性的注解: @interface MyAn

Java元注解

元注解的作用是负责注解其他注解.Java定义了4中标准的元注解类型,他们被用来提供对其他注解的说明. @target @Retention @Documented @Inherited 这些类型可以和他们所支持的类在Java.lang.annotation包中找到 每个元注解的作用: @target 修饰了annotation所修饰的对象范围,annotation可被用于package,type(类,接口,枚举,annotation),和类型成员(方法,构造方法,成员变量,枚举值).方法参数和本

java 元注解

java元注解的作用是注解其他注解,java5.0定义了四个标准的元注解:@Target.@Retention.@Inherit.@Documented. 1)@Target:用于描述注解可以修饰的类型.其可选值为:(ElementType.TYPE) ANNOTATION_TYPE(注解类型声明) PACKAGE(包) TYPE(类.接口.枚举) METHOD(方法声明) FIELD(成员变量) LOCAL_VARIABLE(本地变量) CONSTRUCTOR(构造方法) 其代码如下: @Do

java元注解详解

java中元注解有四个: @Retention @Target @Document @Inherited:  @Retention:注解的保留位置 @Retention(RetentionPolicy.SOURCE)   //注解仅存在于源码中,在class字节码文件中不包含 @Retention(RetentionPolicy.CLASS)     // 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得, @Retention(RetentionPolicy.RUNTIME

java元注解 @Retention注解使用

@Retention定义了该Annotation被保留的时间长短: 1.某些Annotation仅出现在源代码中,而被编译器丢弃: 2.另一些却被编译在class文件中,注解保留在class文件中,在加载到JVM虚拟机时丢弃,这是默认行为,所以没有用Retention注解的注解,都会采用这种策略 3.而另一些在class被装载时将被读取,注解保留在程序运行期间,此时可以通过反射获得定义在某个类上的所有注解 作用:表示需要在什么级别保存该注释信息,用于描述注解的生命周期(即:被描述的注解在什么范围

Java注解(1)-注解基础

注解(Annotation)是在JAVA5中开始引入的,它为在代码中添加信息提供了一种新的方式.注解在一定程度上把元数据与源代码文件结合在一起,正如许多成熟的框架(Spring)所做的那样.那么,注解到底可以做什么呢? 1.注解的作用. 提供用来完整地描述程序所需要的信息,如编译期校验程序信息. 生成描述符文件,或生成新类的定义. 减轻编写"样板"代码(配置文件)的负担,可以使用注解自动生成. 更加干净易读的代码. 编译期类型检查. 2.Java提供的注解 Java5内置了一些原生的注

Java注解(3)-注解处理器(编译期|RetentionPolicy.SOURCE)

注解的处理除了可以在运行时通过反射机制处理外,还可以在编译期进行处理.在编译期处理注解时,会处理到不再产生新的源文件为止,之后再对所有源文件进行编译. Java5中提供了apt工具来进行编译期的注解处理.apt是命令行工具,与之配套的是一套描述"程序在编译时刻的静态结构"的API:Mirror API(com.sun.mirror.*).通过Mirror API可以获取到被注解的Java类型元素的信息,从而提供自定义的处理逻辑.具体的处理工具交给apt来处理.编写注解处理器的核心是两个

javaweb-单元测试与注解

本来这一篇是接在上一篇后面的,但是晚上写到一半有事出去了,故而分开了, 这一篇用到了jar包有:mysql-connector-java-5.0.8-bin.jar 7,注解: 7.1 概述:jdk5.0的新特性 包括有:泛型,自动装箱,自动拆箱,静态导入,可变参数,增强for循环,枚举等(快去把老版本的jdk升级吧) 7.1.1 注解不是注释 注释是给程序员看代码用的,注解是代码中的特殊标记,可以看做是替代配置文件的选择,本身意义不大,但是可以通过注解+反射组合告诉类该如何运行 7.1.2 写