java成神之——注释修饰符
注释修饰符
自定义注释
元注释
用来注释自定义注释的注释
@Target 限定注释允许加载的目标
@Target(ElementType.METHOD) 只能用于方法
@Target({ElementType.FIELD, ElementType.TYPE}) 可以用于字段和类型
ANNOTATION_TYPE 注解其他的注释
CONSTRUCTOR 注解构造函数
FIELD 注解字段和枚举常量
LOCAL_VARIABLE 注解局部变量
PACKAGE
METHOD 注解方法
PARAMETER 注解方法参数
TYPE 注解class,interface,enum
TYPE_PARAMETER 注解泛型参数
TYPE_USE 注解强转类型
@Retention 设置注解在程序runtime时期能否被反射访问到
@Retention(RetentionPolicy.RUNTIME) 运行反射访问
CLASS 值运行在class文件中访问,而不是runtime
RUNTIME
SOURCE 能够在compiletime配访问到,但是不会添加到class文件中
@Documented 让文档生成器能够识别
@Inherited 这个注释用来改变注释查询方式,从而只用来检查父类,直到发现目标
@Repeatable 多个注释实例能够被附加到注释目标
通过反射在runtime访问注释
声明注释
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@interface MyAnnotation {
String param1() default "someValue";
boolean param2() default true;
int[] param3() default {};
}
使用注释
@MyAnnotation
public static void Test() throws Exception {
Annotation[] annotationsByType = MyAnnotation.class.getAnnotations();
System.out.println("----------" + Arrays.toString(annotationsByType));
}
内置注释
@Override 重写父类方法
@Deprecated 废弃api
@SuppressWarnings("unchecked") 取消系统的某些警告信息,尽量少用
@SafeVarargs 抑制可变参数警告
@SafeVarargs
public static<T> void Test(T... lists) throws Exception {
}
@FunctionalInterface 用来声明函数式接口,也就是只能包含一个方法
@FunctionalInterface
public interface Test<T> {
boolean test(T t);
}
多注释实例
错误写法
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@interface MyAnnotation1 {
String param();
}
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation2 {
String param() default "someValue";
}
报错
@MyAnnotation1(param="someValue")
@MyAnnotation1(param="someValue")
使用容器改写
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@interface MyAnnotation1 {
String param();
}
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation2 {
MyAnnotation1[] param();
}
@MyAnnotation2(param={
@MyAnnotation1(param="someValue1"),
@MyAnnotation1(param="someValue2"),
})
获取注释的值
MyAnnotation1[] MyAnnotations = TestController.class.getAnnotation(MyAnnotation2.class).param();
for (MyAnnotation1 item : MyAnnotations) {
System.out.println(item.param());
}
使用@Repeatable元注释
@Repeatable(MyAnnotation2.class)
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation1 {
String value();
}
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation2 {
MyAnnotation1[] value();
}
@MyAnnotation1(value="someValue1")
@MyAnnotation1(value="someValue2")
获取注释值
MyAnnotation1[] MyAnnotations = TestController.class.getAnnotationsByType(MyAnnotation1.class);
for (MyAnnotation1 item : MyAnnotations) {
System.out.println(item.value());
}
注释继承
添加了@Inherited,继承的子类可以访问父类的注释
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation1 {
String value();
}
@MyAnnotation1(value="someValue1")
class Father {
}
public class Test extends Father{
MyAnnotation1[] MyAnnotations = Test.class.getAnnotationsByType(MyAnnotation1.class);
for (MyAnnotation1 item : MyAnnotations) {
System.out.println(item.value());
}
}
使用反射获取注释
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation1 {
String value();
}
获取类的注释
@MyAnnotation1(value="someValue1")
public class Test{}
MyAnnotation1 annotation = Test.class.getAnnotation(MyAnnotation1.class);
System.out.println(annotation.value());
获取方法的注释
@MyAnnotation1(value="someValue1")
public Object Test() throws Exception {}
Method method = TestController.class.getMethod("Test", null);
MyAnnotation1 annotation = (MyAnnotation1)method.getAnnotation(MyAnnotation1.class);
System.out.println(annotation.value());
结语
本文章是java成神的系列文章之一
如果你想知道,但是本文没有的,请下方留言
我会第一时间总结出来并发布填充到本文
java成神之——注释修饰符的更多相关文章
- java成神之——ImmutableClass,null检查,字符编码,defaultLogger,可变参数,JavaScriptEngine,2D图,类单例,克隆,修饰符基本操作
ImmutableClass null检查 字符编码 default logger 函数可变参数 Nashorn JavaScript engine 执行脚本文件 改变js文件输出流 全局变量 2D图 ...
- java成神之——接口,泛型,类
接口 接口定义 默认方法 函数式接口 泛型 泛型类 泛型类继承 类型限定 泛型方法 泛型接口 类 构造函数 类的继承 抽象类 instanceof运算符 内部类 equals 结语 接口 接口定义 j ...
- JAVA基础语法——标识符、修饰符、关键字(个人整理总结)
JAVA基础语法——标识符.修饰符.关键字 一 . 标识符 1.1 什么是标识符 就是程序员在定义java程序时,自定义的一些名字,例如helloworld 程序里关键字class 后跟的Dem ...
- java成神之——正则表达式基本使用
正则表达式 常用匹配规则 基本使用 标记符的使用 部分正则标记 正则表达式在字符串方法中的使用 结语 正则表达式 常用匹配规则 [abc] abc其中一个 [^abc] abc之外的一个 [a-z] ...
- java成神之——java中string的用法
java中String的用法 String基本用法 String分割 String拼接 String截取 String换行符和format格式化 String反转字符串和去除空白字符 String获取 ...
- java成神之——java常识
java常识 简单DOS命令 java基础名词 java编译和运行流程 Eclipse常用快捷键 Eclipse相关操作 java基本数据类型 java基本数据类型转换 java常用运算符 java流 ...
- Java入门 - 语言基础 - 07.修饰符
原文地址:http://www.work100.net/training/java-modifier-type.html 更多教程:光束云 - 免费课程 修饰符 序号 文内章节 视频 1 概述 2 访 ...
- 转载_2016,Java成神初年
原文地址:http://blog.csdn.net/chenssy/article/details/54017826 2016,Java成神初年.. -------------- 时间2016.12. ...
- Java成神路上之设计模式系列教程之一
Java成神路上之设计模式系列教程之一 千锋-Feri 在Java工程师的日常中,是否遇到过如下问题: Java 中什么叫单例设计模式?请用Java 写出线程安全的单例模式? 什么是设计模式?你是否在 ...
随机推荐
- 阿里云上如何利用war包安装jenkins
一. 前提条件:已安装jdk和tomcat 如何安装,请参考<如何在阿里云上部署war包到tomcat服务器> 二. 下载war包 下载地址:http://mirrors.jenkins- ...
- Windows 使用技巧
怎样添加“发送到”的快捷方式,cmd里面shell:sendto打开文件夹,把快捷方式放进去就可以了. vs中c#快速实现接口所有函数快捷键: 鼠标放在实现的接口上面+shift+alt+F10.
- 程序员们,AI来了,机会来了,危机也来了
程序员们,AI来了,机会来了,危机也来了 1.人工智能真的来了 纵观古今,很少有计算机技术能有较长的发展寿命,大部分昙花一现,比如:昔日的DOS.windows3.2.foxpro.delphi.80 ...
- beego数据输出
beego数据输出 概览 直接输出字符串 模板数据输出 静态模板数据输出 动态模板数据输出 json格式数据输出 xml格式数据输出 jsonp调用 概览 直接输出字符串 通过beego.Cont ...
- 旧书重温:0day2【9】第六章 攻击c++的虚函数
不知不觉,我们学到了0day2的第六章形形色色的内存攻击技术!其中,这张很多东西都是理论的东西,不过!我们还是要想办法还原下发生的现场! 其中部分文章截图 http://user.qzone.qq.c ...
- 数据库查询操作(fetchone,fetchall)
数据库查询操作 Python查询Mysql使用 fetchone() 方法获取单条数据, 使用fetchall() 方法获取多条数据. fetchone(): 该方法获取下一个查询结果集.结果集是一个 ...
- 【解题报告】[动态规划] - PID90 / 未出现的子串
原题地址:http://www.rqnoj.cn/problem/90 解题思路:题目看起来不太像动态规划... 我用一个数组f[i][j]来表示在数组第i个元素的后面第一次出现j的位置,为-1则是没 ...
- ACM ICPC 2018 青岛赛区 部分金牌题题解(K,L,I,G)
目录: K Airdrop I Soldier Game L Sub-cycle Graph G Repair the Artwork ———————————————————— ps:楼主脑残有点严 ...
- 小而实用的工具插件集锦(JQGrid,zTree)
jqgrid,JQGrid是一个在jquery基础上做的一个表格控件,看起来感觉还可以,以ajax的方式和服务器端通信 效果图: 这个小东西,多用在在工作流上面. 中文文档: http://blog. ...
- 《C#求职宝典》读书笔记
王小科 电子工业出版 第一篇 面试求职第一步 一个例子:一支行军中的队伍长100米,一个传令兵从队尾跑至队头,再立即返回队尾,队伍正好前进了100米.假设队伍 和传令兵行进的速度恒定,问传令兵跑了多少 ...