博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java注解简单学习
阅读量:5086 次
发布时间:2019-06-13

本文共 2586 字,大约阅读时间需要 8 分钟。

注解(也被称作元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们在稍后某个时刻可以很方便的使用这些数据,其在一定程度上将元数据与源代码文件结合在一起,而不是保存在外部文档中。

注解使我们可以用将来由编译器测试和验证的格式,存储程序有关的额外信息。注解可以用来生成描述符文件,甚至是新的类定义,并且有助于减轻编写“样板”代码的负担。通过使用注解,将元数据保存在Java源代码中,并利用annotation API为注解构造处理工具来读取注解。

Java目前只内置了三种标准注解,以及四种元注解。元注解专职负责注解其他注解。大多数时候,程序员都是定义自己的注解,并编写自己的注解处理器来处理他们。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

一个简单的注解例子

注解定义:

1 import java.lang.annotation.*;2 3 @Target(ElementType.METHOD)                    //定义注解用于什么地方4 @Retention(RetentionPolicy.RUNTIME)          //定义注解在哪个级别可用5 public @interface UseCase {6   public int id();7   public String description() default "no description";8 }

在注解中,一般都会包含一些元素以表示某些值。当分析处理注解时,程序或工具可以利用这些值。注解的元素看起来就像接口的方法,唯一的区别就是你可以为其制定默认值。没有元素的注解成为标记注解。

使用注解:

1 import java.util.*; 2  3 public class PasswordUtils { 4   @UseCase(id = 47, description = "Password must contain at least one numeric") 5   public boolean validataPassword(String password) { 6     return (password.matches("\\w*\\d\\w*")); 7   } 8      9   @UseCase(id = 48)10   public String encryptPassword(String password) {11     return new StringBuilder(password).reverse().toString();12   }13     14   @UseCase(id = 49, description = "New password can't equal previously used ones")15   public boolean checkForNewPassword(List
prevPasswords, String password) {16 return !prevPasswords.contains(password);17 }18 }

注解@UseCase可以与任何修饰符共同作用于方法,例如publicstaticvoid。从语法角度看,注解的使用方式几乎与修饰符的使用一模一样。注解的定义很像接口的定义,注解与其他任何Java接口一样,会被编译成class文件。

编写注解处理器:

1 import java.lang.reflect.*; 2 import java.util.*; 3  4 public class UseCaseTracker { 5   public static void trackUseCases(List
useCases, Class
cl) { 6 for (Method m : cl.getDeclaredMethods()) { 7 UseCase uc = m.getAnnotation(UseCase.class); 8 if (uc != null) { 9 System.out.println("Found Use Case:" + uc.id() + " " + uc.description());10 useCases.remove(new Integer(uc.id())); 11 }12 }13 for (int i : useCases) {14 System.out.println("Warning:Missing use case-" + i);15 }16 }17 public static void main(String[] args) {18 List
useCases = new ArrayList
();19 Collections.addAll(useCases, 47, 48, 49, 50);20 trackUseCases(useCases, PasswordUtils.class);21 } 22 }

如果没有用来读取注解的工具,那注解不会比注释更有用。使用注解的过程中,很重要的一个部分就是创建与使用注解处理器。Java SE5扩展了反射机制的API,以帮助程序员构造这类工具。同时,它还提供一个外部工具apt帮助程序员解析带有注解的Java源代码。

注解元素的类型:

    · 所有基本类型(intfloatboolean等)

    · String

    · Class

    · enum

    · Annotation

    · 以上类型的数组

 如果是使用了其他类型,编译器会报错。注解也可以作为元素的类型,即注解可以嵌套

 

参考:《Java编程思想》

 

转载于:https://www.cnblogs.com/zviolet/p/7447133.html

你可能感兴趣的文章
ID3算法
查看>>
Java Math类(java.lang包)
查看>>
linux samba 服务器 简单配置
查看>>
Project Euler Problem 21-Amicable numbers
查看>>
HelloWorld.asm
查看>>
HTMl5的sessionStorage和localStorage
查看>>
斗战神 琵琶之怨获取攻略
查看>>
链表操作
查看>>
20170416输入法不见了怎么办 输入法无法切换修复方法
查看>>
zbb20170811 mysql远程连接报错: Host * is not allowed to connect to this MySQL server,解决方法...
查看>>
4-14 学习
查看>>
javascript雪花效果 注释版
查看>>
jstl进步篇
查看>>
个人整理的Java领域的技术
查看>>
bootstrap selectpicker 通过代码指定选中值 BootStrap selectpicker后台动态绑定数据 selectpicker 获取选中option的属性或者值...
查看>>
Sqlserver精简安装选项
查看>>
PAT1107:Social Clusters
查看>>
嗨翻C语言
查看>>
Java程序员,上班那点事儿
查看>>
前端的重要部分js
查看>>