首页 > 编程语言 >Java编程思想16

Java编程思想16

时间:2022-12-25 22:33:58浏览次数:36  
标签:lang java 16 编程 public Java import 注解 annotation

第二十章:注解

注解(也被称为元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某个时刻非常方便地使用某些数据。

定义注释

package annotations;

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 {
}

除了@符号以外,@Test的定义很像一个空的接口。定义注解时,会需要一些元注解(meta-annotation),如@Target和@Retention。@Target用来定义你的注解将应用于什么地方(例如是一个方法或者一个域)。@Rectetion用来定义该注解在哪一个级别可用,在源代码中(SOURCE)、类文件中(CLASS)或者运行时(RUNTIME)。

  没有元素的注解称为标记注解,例如上例种的@Test。

注解元素
  注解元素可用的类型如下:

所有基本类型(int, float, boolean等)
String
Class
enum
Annotation
以上类型的数组
  如果你使用了其它类型,编译器就会报错。注意,也不允许使用任何包装类型,不过由于自动打包的存在,这算不上什么限制。注解也可以作为元素的类型,也就是说,注解可以嵌套。

元注解
  Java目前只内置了四种元注解,元注解专职负责注解其它的注解:

 

 

大多数时候,程序员主要是定义自己的注解,并编写自己的处理器来处理它们。

  下面是一个简单的注解,我们可以用它来跟踪一个项目中的用例。如果一个方法或一组方法实现了某个用例的需求,那么程序员可以为此方法加上该注解。于是,项目经理通过计算已经实现的用例,就可以很好地掌控项目的进展。而如果要更新或修改系统的业务逻辑,则维护该项目的开发人员也可以很容易地在代码中找到对应的用例。

package annotations;

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 UseCase {
public int id();
public String description() default "no description";
}

 

注意,id和description类似方法定义。由于编译器会对id进行类型检查,因此将用例文档的追踪数据库与源代码相关联是可靠的。description元素有一个default值,如果在注解某个方法时没有给出description的值,则该注解的处理器就会使用此元素的默认值。
  在下面的类中,有三个方法被注解为用例∶

package annotations;

import java.util.List;

/**
* @author Mr.Sun
* @date 2022年09月03日 9:05
*
* 注解用例
*/
public class PasswordUtils {

@UseCase(id = 47, description = "密码必须至少包含一个数字")
public boolean validatePassword(String password) {
return (password.matches("\\w*\\d\\w*"));
}

@UseCase(id = 48)
public String encryptPassword(String password) {
return new StringBuilder(password).reverse().toString();
}

@UseCase(id = 49, description = "新密码不能等于以前使用的密码")
public boolean checkForNewPassword(List<String> prevPasswords, String password) {
return !prevPasswords.contains(password);
}
}

注解的元素在使用时表现为名一值对的形式,并需要置于@UseCase声明之后的括号内。在encryptPassword()方法的注解中,并没有给出description元素的值,因此,在UseCase的注解处理器分析处理这个类时会使用该元素的默认值。
  你应该能够想象得到如何使用这套工具来“勾勒”出将要建造的系统,然后在建造的过程中逐渐实现系统的各项功能。

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

标签:lang,java,16,编程,public,Java,import,注解,annotation
From: https://www.cnblogs.com/LvJinshuai/p/17004783.html

相关文章

  • bat执行java程序的脚本解析
     使用java执行带Package的class文件javapackage1.package2.className 或java-cp. package1.package2.className-cp将当前路径设置到classpath,windows默认情况下会......
  • 6.面向对象编程(下)
    一、关键字:static当我们编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实质上的对象,只有通过new关键字才会产生出对象,这时系统才会分配内存空间给对象,其方法......
  • Eclipse启动后一直Initializing Java Tooling (1%)
     问题症状:工作中eclipse崩溃,再次启动后cpu占用99%,状态栏一直显示Initializing JavaTooling:(1%)。 解决方案:删除\workspace\.metadata\.plugins\org.eclipse.core.reso......
  • Java 之 CAS 原理及实现是怎样的?
    面试官:今天我们来聊聊CAS吧?你对CAS了解多少?候选者:好,CAS的全称为compareandswap,比较并交换候选者:虽然翻译过来是「比较并交换」,但它是一个原子性的操作,对应到CPU指令......
  • java 学习
    javacJunior.javajavaJunior  Employee.java//importjava.io.*;//下面的命令行将会命令编译器载入java_installation/java/io路径下的所有类publicclass......
  • Cf1625C Road Optimization
    Cf1625CRoadOptimization题意:在一条长为\(1\)的公路上有\(n\)个路标,第\(i\)个路标在第\(d_i\)米处,限速\(a_i\),意味着在这个路标到下一个路标之间的路段最快......
  • 网络基础编程
    7.2.1套接字(socket)概述7.2.2地址及顺序处理7.2.3套接字编程 套接字定义在Linux中的网络编程是通过socket接口来进行的。套接字(socket)是一种特殊的I/O接口,它......
  • BFS场景样例测试--最短路径--用Java实现
    我们今天研究下最短路径用BFS来实现 首先确定数据结构/***二叉树数据结构节点*/publicclassTreeNode{intvalue;TreeNodeleft;TreeNoder......
  • Java编程思想13
    第十八章:JavaI/O系统对程序语言的设计者而言,创建一个好的输入/输出(I/O)系统是一项艰难的任务。File类既能代表一个特定文件的名称,又能代表一个目录下一组文件的名称。下......
  • BFS场景样例测试--层次遍历--用Java实现
    我们今天研究下层次便利用BFS来实现 首先确定数据结构/***二叉树数据结构节点*/publicclassTreeNode{intvalue;TreeNodeleft;TreeNoderi......