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 java.util.@TypeUseAnnotation Scanner(System.in);
}
}
java元注解 @Target注解用法的更多相关文章
- Java复习——枚举与注解
枚举 枚举就是让某些变量的取值只能是若干固定值中的一个,否则编译器就会报错,枚举可以让编译器在编译阶段就控制程序的值,这一点是普通变量无法实现的.枚举是作为一种特殊的类存在的,使用的是enum关键字修 ...
- Java基础教程——解析注解
解析注解 Java 5开始,java.lang.reflect包下的反射API可以在运行时读取Annotation. 应用:定义一个自动执行方法的注解,解析注解.通过反射执行方法,替代配置文件. pa ...
- 元注解——java.lang.annotation.Target(1.8)
参考资料:https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html 普通注解’只能用来注解’代码’,而’元注 ...
- Java元注解—— @Retention @Target @Document @Inherited
java中元注解有四个: @Retention @Target @Document @Inherited: @Retention:注解的保留位置 @Retention(RetentionPolicy. ...
- spring boot: Annotation 注解之@Target的用法介绍
前言 目前,越来越多的架构设计在使用注解,例如spring3.0.struts2等框架.让我们先来看看注解的定义.如下是一段使用了JDK 5 Annotation @Target的代码: @Targe ...
- Java元注解,简单案例
[注解] 程序中有 注释 和注解 * 注释:给开发人员. * 注解:给计算机看的. 注解使用:学习框架支持注解开发. [JDK提供的注解] @Override :描述方法的重写. @SuppressW ...
- Java注解Annotation的用法 - 自定义Annotation实现
Java注解又称Java标注,是Java语言5.0版本开始支持加入源代码的特殊语法元数据. Java语言中的类.方法.变量.参数和包等都可以被标注.和Javadoc不同,Java标注可以通过反射获取标 ...
- 使用Java元注解和反射实现简单MVC框架
Springmvc的核心是DispatcherServlet来进行各种请求的拦截,进而进行后续的各种转发处理.流程图如下: 说明:客户端发出一个http请求给web服务器,web服务器对http请求进 ...
- Java之四大元注解@Target、@Retention、@Documented、@Inherited
什么叫做元注解?? ==>用于注解[注释]的注解就叫做元注解 注解叫做:元数据,标签,注释 元注解[数据]--->注解--->标记代码 1.@Target : ...
随机推荐
- MySQL的basedir
C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.7\Data
- SQLSERVER 2014 SP1 的服务器 日志文件无法收缩的处理
1. 公司一台服务器 日子会文件到了 100g+ 但是无法收缩 2. 根据同事的经验进行验证 dbcc loginfo 单独看改数据库的 dbcc loginfo("CWBASEGS60&q ...
- 转载:必须收藏!50个最流行的免费Kubernetes工具集
必须收藏!50个最流行的免费Kubernetes工具集 http://cloud.51cto.com/art/201806/576406.htm 在短短的两年时间里,Kubernetes在容器编排的竞 ...
- laravel 共享session问题总结
我现在有一个A系统已经上线了,但是要开始研发另外一个功能,我打算把这个功能独立成一个B系统出来,放在其他域名下面,打算在这个A系统登录后,里面一个连接跳转到B系统,看到一些资料说用到共享Session ...
- HTTP消息头(HTTP headers)-常用的HTTP请求头与响应头
HTTP消息头是指,在超文本传输协议( Hypertext Transfer Protocol ,HTTP)的请求和响应消息中,协议头部分的那些组件.HTTP消息头用来准确描述正在获取的资源.服务器或 ...
- SVG to Image in js
SVG to Image in js SVG to Image https://image.online-convert.com/convert-to-svg https://stackoverflo ...
- LOJ121 动态图连通性(LCT)
用LCT维护一下删除时间的最大生成树即可.当然也可以线段树分治. #include<iostream> #include<cstdio> #include<cmath&g ...
- ajax跨域,携带cookie
解决方案很简单. 直接上代码: web.xml中: 添加了 cors来解决跨域 (奇怪的是,credentials设置为false.反正这个是照搬的...) <filter> ...
- 【BZOJ1802】[AHOI2009]checker(动态规划)
[BZOJ1802][AHOI2009]checker(动态规划) 题面 BZOJ 洛谷 题解 首先自己观察一波,发现如果有相邻两个格子都是红色的话,那么显然可以在任意位置都存在一个跳棋.可以让两个位 ...
- 【BZOJ3668】【NOI2014】起床困难综合症(贪心)
[NOI2014]起床困难综合症(贪心) 题面 Description 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚 ...