JDK 5 提供的注解

Retention注解

Retention(保留)注解说明,这种类型的注解会被保留到那个阶段. 有三个值:

1.RetentionPolicy.SOURCE —— 这种类型的Annotations只在源代码级别保留,编译时就会被忽略

2.RetentionPolicy.CLASS —— 这种类型的Annotations编译时被保留,在class文件中存在,但JVM将会忽略

3.RetentionPolicy.RUNTIME —— 这种类型的Annotations将被JVM保留,所以他们能在运行时被JVM或其他使用反射机制的代码所读取和使用.

@Retention(RetentionPolicy.RUNTIME)

public @interface Test_Retention {

String doTestRetention();

}

在这个示例中, @Retention(RetentionPolicy.RUNTIME)注解表明 Test_Retention注解将会由虚拟机保留,以便它可以在运行时通过反射读取.

Documented 注解

Documented 注解表明这个注解应该被 javadoc工具记录. 默认情况下,javadoc是不包括注解的.

但如果声明注解时指定了 @Documented,则它会被 javadoc 之类的工具处理, 所以注解类型信息也会被包括在生成的文档中.

@Documented

public @interface Test_Documented {

String doTestDocument();

}

接下来,像下面这样修改TestAnnotations类

public class TestAnnotations {
   public static void main(String arg[]) {
      new TestAnnotations().doSomeTestRetention();
      new TestAnnotations().doSomeTestDocumented();
   }
   @Test_Retention (doTestRetention="保留注解信息测试")
   public void doSomeTestRetention() {
      System.out.printf("测试注解类型 ‘Retention‘");
   }
   @Test_Documented(doTestDocument="Hello document")
   public void doSomeTestDocumented() {
      System.out.printf("测试注解类型 ‘Documented‘");
   }
}

现在,如果你使用 javadoc命令生成 TestAnnotations.html文件,你将看到类似于图1的结果.

从截图可以看到,文档中没有 doSomeTestRetention() 方法的 annotation-type信息()方法.

但是, doSomeTestDocumented() 方法的文档提供了注解的描述信息.

这是因为 @Documented标签被加到了Test_Documented注解上. 之前的注解Test_Retention并没有指定 @Documented 标记(tag).

Inherited 注解

这是一个稍微复杂的注解类型. 它指明被注解的类会自动继承.

更具体地说,如果定义注解时使用了 @Inherited 标记,然后用定义的注解来标注另一个父类,

父类又有一个子类(subclass),则父类的所有属性将被继承到它的子类中.

首先,定义你的注解:

@Inherited
public @interface MyParentObject {
      boolean isInherited() default true;
      String doSomething() default "Do what?";
}

接下来,使用注解标注了一个类:

@MyParentObject
public Class MyChildObject {
}

正如你看到的,你不需要在实现类中定义接口方法. 因为使用 @Inherited标记,这些都自动继承了.

如果你使用一种古老的方式定义实现类,会是什么样子呢? 看看下面这张 古老的实现方式吧:

public class MyChildObject implements MyParentObject {
   public boolean isInherited() {
      return false;
   }
   public String doSomething() {
      return "";
   }
   public boolean equals(Object obj) {
      return false;
   }
   public int hashCode() {
      return 0;
   }
   public String toString() {
      return "";
   }
   public Class annotationType() {
      return null;
   }
}
时间: 2024-10-10 13:41:48

JDK 5 提供的注解的相关文章

使用jdk中提供的排序方式

package com.bjpowernode.t01; import java.util.Arrays; /** * 使用jdk中提供的排序方式 * */public class TestArray11 { public static void main(String[] args) { int[] a = {4,2,7,3,6}; //对数组进行排序 Arrays.sort(a); //升序输出// for(int i=0; i<a.length; i++) {// System.out.p

jdk的entity表格注解&#183;

第一导包: import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; 第二注解简介,实例如下 @Entity @Table(name="t_

实现JDK没有提供的AtomicFloat

Java8内置了强大的多核支持,我们在处理数据的时候,如果不充分利用多核,都好不意思跟老板打招呼. 我们经常会使用AtomicInteger来做计数器,如下所示: List<String> words = Files.readAllLines(Paths.get("src/main/resources/dic.txt")); AtomicInteger i = new AtomicInteger(); words.parallelStream().forEach(word 

xUtils怎样通过注解对FindViewById进行封装

之前讲到了介绍了一下xUtils的基本用法,今天我们就来具体介绍一下关于xUtils中的ViewUtils模块. 在ViewUtils模块中我们首先看到的是它採用了一种注解的方式进行声明,那么我们首先来了解一下什么是注解. 注解(Annotation)非常重要,未来的开发模式都是基于注解的.JPA是基于注解的.Spring2.5以上都是基于注解的.Hibernate3.x以后也是基于注解的,如今的Struts2有一部分也是基于注解的了,注解是一种趋势,如今已经有不少的人開始用注解了.注解是JDK

xUtils如何通过注解对FindViewById进行封装

之前讲到了介绍了一下xUtils的基本使用方法,今天我们就来详细介绍一下关于xUtils中的ViewUtils模块. 在ViewUtils模块中我们首先看到的是它采用了一种注解的方式进行声明,那么我们首先来了解一下什么是注解. 注解(Annotation)很重要,未来的开发模式都是基于注解的,JPA是基于注解的,Spring2.5以上都是基于注解的,Hibernate3.x以后也是基于注解的,现在的Struts2有一部分也是基于注解的了,注解是一种趋势,现在已经有不少的人开始用注解了,注解是JD

JavaWeb-21 JDBC(泛型,注解,Servlet3.0,Log4j)

JavaWeb-21 泛型,注解,Servlet3.0,Log4j 今天任务: 1.泛型概述 2.Dao模式下泛型的引入 3.注解及反射注解 4.Servlet3.0 5.Log4j(明白怎么用,就够) 一.了解泛型 1.了解泛型: GenericTestDemo1.java package com.itheima.generic; /** * 泛型类中的所有实例方法都可以不用声明,不包含静态方法 * @author wangli * * @param <T> */ public class

模拟@Test的功能实现代码

1.1.1 需求:定义一个类,在类中编写一些测试方法:测试方法的格式:public void xxx() 在测试方法上添加@MyTest 然后可以使这个类中添加了有@MyTest注解的方法执行.1.1.2 分析:1.1.2.1 技术分析:[注解的概述] ? 注解和注释区别: * 注释:给程序员看的. * 注解:给虚拟机看的.(让虚拟机看到程序中的注解,注解代表程序的一些特殊的功能.) [JDK中提供的注解] ? @Override :描述子类重写父类的方法: * JDK1.5版本的时候 该注解只

JDK注解替代Hibernate的Entity映射

1.在entity(实体类)模块中使用注解 1_1.注解的位置出现在 [类定义的前面] 和 [属性的get方法前面] Java代码: package app.entity; //模型 //注意看,导入的是jdk的拓展包 import javax.persistence.*; @Entity //告诉Spring这个类是实体类.模型类 @Table(name="t_demo") //声明这个模型对于其哪张数据表 public class Demo { private Integer ci

了解注解及java提供的几个基本注解

先通过@SuppreessWarnings的应用让大家直观地了解注解: 通过System.runFinalizersOnExit(true);的编译器警告引出           @SuppressWarnings("deprecation")     @Deprecated 直接在刚才的类中增加一个方法,并加上@Deprecated标注,在另一个类中调用这个方法.   @Override public boolean equals(Reflect other)方法与HashSet结合