Java编程思想 Ch20 注解
注解(也称元数据)
三种标准注解
@Override | 表示当前方法覆盖超类中的方法 |
---|---|
@Deprecated | 使用注解为这个的元素,编译器会发出警告 |
@SuppressWarnings | 关闭不当编译器警告信息 |
20.1 基本语法
20.1.1 定义注解
package Ch20;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 Test {}
20.1.2 元注解
@Target | 表示注解可以的地方 |
---|---|
@Retentioin | 表示需要神秘级别保存该注解信息 |
@Documented | 将注解包含在Javadoc中 |
@Inherited | 允许子类继承父类中的注解 |
20.2 编写注解处理器
没有注解处理器,注解和注释一样。
/*定义注解********************************************************/
package Ch20;import java.lang.annotation.*;@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)public @interface UseCase {//注解的元素看起来像接口方法。区别在于可以添加默认值public int id();public String description() default "no description";
}/*使用注解*********************************************************/package Ch20;
import java.util.*;public class PasswordUtils {//可以看到元素并不是方法那样定义,而是直接当变量使用。@UseCase(id = 47, description = "Passwords must contain at least one numeric")public boolean validatePassword(String password){return (password.matches("\\w*\\d\\w*"));}@UseCase(id = 48)public boolean encryptPassword(String password) {return (password.matches("\\w*\\d\\w*"));}@UseCase(id =49, description = "New passwords can't equal previouslu used ones")public boolean checkForNewPassword(List<String> prevPasswords, String password){return !prevPasswords.contains(password);}}/*注解处理器***************************************************/
package Ch20;//import java.lang.reflect.Method;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;public class UseCaseTracker {public static void trackUseCases(List<Integer> useCases, Class<?> cl) {for(Method m : cl.getDeclaredMethods()){//getAnnotation(Class)指定返回的注解类型的对象。没有返回nullUseCase uc = m.getAnnotation(UseCase.class);if(uc != null){System.out.println("Found Use Case: "+uc.id()+" "+uc.description());useCases.remove(new Integer(uc.id()));}}for(int i : useCases){System.out.println("Warning: Missing use case-"+i);}}public static void main(String[] args) {List<Integer> useCases = new ArrayList<>();Collections.addAll(useCases,47,48,49,50);trackUseCases(useCases,PasswordUtils.class);}
}/*Found Use Case: 47 Passwords must contain at least one numeric
Found Use Case: 48 no description
Found Use Case: 49 New passwords can't equal previouslu used ones
Warning: Missing use case-50*/
20.2.1 注解元素
注解元素可用的类型如下:
所有基本类型 |
---|
String |
Class |
enum |
Annotation |
以上类型的数组 |
注解也可以嵌套
20.2.2 默认值限制
元素不能有不确定的值。
对于非基本类型的元素,不能以null作为其值。这个限制使得表现元素缺失或存在状态很难。
package Ch20;@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Test {public int id() default -1;public String description() default "";
}
20.2.3 生产外部文件
Java编程思想 Ch20 注解相关推荐
- 【java】《java编程思想》 读书笔记
之前主要用的C++的比较多,之前花了快2个月的实际认真系统全面的学习了以下java的基础语法,<java编程思想>这本书翻译水平确实不是很好,很多话读着会比较拗口.推荐读之前,先去网上搜索 ...
- java编程思想--概述
之前主要用的C++的比较多,之前花了快2个月的实际认真系统全面的学习了以下java的基础语法,<java编程思想>这本书翻译水平确实不是很好,很多话读着会比较拗口.推荐读之前,先去网上搜索 ...
- java编程思想怎么样_读完java编程思想后的思考?
谢邀,这本书真的给我带来很多思考. 我的java入门不是java编程思想,学校的教材是一本紫色的书,已经忘了叫什么名字了,里面内容倒挺新还讲了些javafx.但那本书实在是太浅并且结构混乱,以至于我和 ...
- 【Java编程思想】读书笔记(二)第六章---第十章
Java编程思想(第四版)学习笔记 第六章---第十章 第六章:访问权限控制 6.2Java访问权限修饰词 第七章:复用类 7.1 组合语法 7.2 继承语法(extends) 7.4.2名称屏蔽(重 ...
- 《Java编程思想》读书笔记
前言:三年之前就买了<Java编程思想>这本书,但是到现在为止都还没有好好看过这本书,这次希望能够坚持通读完整本书并整理好自己的读书笔记,上一篇文章是记录的第十七章到第十八章的内容,这一次 ...
- 《JAVA编程思想》学习笔记:第8章(多态)
目录 Java编程思想(一)第1~4章:概述 Java编程思想(二)第5章:初始化和清理 Java编程思想(三)第6章:访问权限 Java编程思想(四)第7章:复用类 Java编程思想(五)第8章:多 ...
- 《JAVA编程思想》学习笔记:第16章(数组)
目录 Java编程思想(一)第1~4章:概述 Java编程思想(二)第5章:初始化和清理 Java编程思想(三)第6章:访问权限 Java编程思想(四)第7章:复用类 Java编程思想(五)第8章:多 ...
- Java编程思想日志
Thinking In Java的作者是大牛!做事要站在巨人的肩膀上有助于提高效率和开阔眼界!建议学习java的小伙伴儿有时间可以抽空了解一下,以下内容为读书笔记,比较杂乱,仅供参考,推荐阅读原著: ...
- Java编程思想翻译勘误
总的来说,Java编程思想是一本好书:但是因为译者可能不懂计算机,很多地方都有严重错误. 之前和朋友抱怨过,朋友提议抱怨无用不如干点实事.遂决定边看边将自己找到的翻译错误贴出来,希望能给别人一些帮助. ...
最新文章
- linux驱动由浅入深系列链接
- 带你看明白class二进制文件!
- 实用计算机相关日语词汇,常用日语计算机词汇~~
- linux服务器拷贝目录文件夹,linux两台服务器之间文件/文件夹拷贝
- python黑网站_Python简单实现HTTP本地代理转发
- 3-3 修改haproxy配置文件
- OpenMV常用函数整理
- python 如何封装成so_python打包成so文件
- camera主观测试_镜头测试:日本富士EBC 135/2.5+索尼A7微单实拍北京北海公园
- 转载Prince_vegeta制作的VC知识库1-53期合订本索引文件。
- 修改tomcat日志数据路径
- PostgreSql扩展(EXTENSION )
- 转自国学大师--南怀谨先生
- Vertica中的projections
- 硅树脂油漆申请美国标准UL 790 Class A 合适吗?
- 机械硬盘速度测试软件用哪个,比机械硬盘快多少? SSD测量了常用软件和应用速度...
- Spring常见面试题55道(附答案2023最新版)
- python小组项目总结报告_项目总结报告范文78922
- Word无法插入两个目录解决方法
- 网络安全工程师需具备的5个重要技能