`
xyheqhd888
  • 浏览: 409260 次
  • 性别: Icon_minigender_1
  • 来自: 秦皇岛
社区版块
存档分类
最新评论

Annotion

阅读更多

1. Annotation对程序运行没有影响,它的目的在于对编译器或分析工具说明程序的某些信息,您可以在包、类、方法、域成员等加上Annotation。每个Annotation对应于一个实际的Annotation类型。

2. 限定Override父类方法@Override

    java.lang.Override是J2SE 5.0中标准的Annotation类型之一,它对编译器说明某个方法必须是重写父类中的方法。编译器得知这项信息后,在编译程序时如果发现被@Override标示的方法并非重写父类中的方法,就会报告错误。

   如下例:

package ysu.hxy;

public class CustomClass
{
	@Override
	public String ToString()
	{
		return "customObject";
	}
}

 

编译时会报告错误:

D:\Java_Test>javac -d . CustomClass.java
CustomClass.java:5: 方法未覆盖其父类的方法
        @Override
         ^
1 错误

 

这就是java.lang.Override这个Annotation类型的作用。如果这里不没有@Override,则此类编译时并不会出现任何的错误,编译器不会知道是想重写toString()方法,只会以为是定义了一新的ToString()方法。将此倒中ToString()方法改为toString()方法编译时就不用有问题了。

2. java.lang.Override是一个Marker Annotation,就是用于标示的Annotation。Annotation类型与Annotation实际上是有区分的,Annotation是否Annotation类型的实例。例如@Override是个Annotation,它是java.lang.Override类型的一个实例,一个文件中可以有很多个@override,但它们都是属于java.lang.Override类型。

3. 标示方法为Deprecated @Deprecated:

    java.lang.Deprecated是J2SE5.0中标准的Annotation类型之一,它对编译器说明某个方法已经不建议使用。如果有开发人员试图使用或者重写被@Deprecated标示的方法,编译器必须提出警告信息。

package ysu.hxy;

public class Something
{
     //使用@Deprecated 为getSomething()方法加上标示
     @Deprecated public Something getSomething()
     {
           return new Something();
     }
}

 如果有人试图在继承这个类后重写或者在程序中调用getSomething()方法,则编译时会有警告出现。如下所示:

package ysu.hxy;

public class SomethingDemo 
{
	public static void main(String[] args) 
	{
		Something some = new Something();
		//调用被@Deprecated标示的方法
		some.getSomething();
	}
}

 编译时会出现以下警告:

             D:\Java_Test>javac -d . SomethingDemo.java
              注意:SomethingDemo.java 使用或覆盖了已过时的 API。
              注意:要了解详细信息,请使用 -Xlint:deprecation 重新编译。

  java.lang.Deprecated也是一个Marker Annotation,简单地说就是用于标示。

4. 抑制编译器警告@SuppressWarnings

    java.lang.SuppressWarnings是J2SE5.0中标准的Annotations类型之一,它对编译器说明某个方法中若有警告信息,则加以抑制,不用在编译完成后出现警告。使用方式参见下面简单示例:

package ysu.hxy;

import java.util.*;

public class SomeClass2
{
   @SuppressWarnings(value=("unchecked"))
   public void doSomething()
    {
        Map map = new HashMap();
        map.put("some","thing");
    }
}

 理论上是可以抑制警告的,你也可以指定忽略多个警告:如

@SuppressWarnings(value={"unchecked","deprecation"});

不过在JDK 5.0上并没有实现这个Annotation的功能,所以@SuppressWarnings实际上并没有作用。如果真要关掉警告,那么在编译时加上-nowarn是另一个方法,只不过这会关掉所有的警告信息。

@SuppressWarnings是所谓的Single-Value Annotation,因为这样的Annotation只有一个成员,称为value成员,可在使用Annotation时作额外的信息指定。

5.  自定义Annotation类型:

     要定义一个Annotation所需的动作,就类似于定义一个接口,只不过使用的是@interface,如下范例:

package ysu.hxy;

public @interface Debug{}

 由于是一个Marker Annotation,所以没有任何成员在Annotation定义中。编译完成后就可以在程序代码中使用这个Annotation。例如:

public class SomeObject
{
   @Debug
   public void doSomething()
   {
       //...
   }
}

 稍后将看到如何在程序中获得Annotation信息,接着来看看如何定义一个Single-Annotation,它只有一个value成员,如下:

 

package ysu.hxy;

public @interface UnitTest
{
  String value();
}

 

实际上定义了value()方法,编译器在编译时会自动产生一个value的域成员,接着在使用UnitTest Annotation时要指定值,如:

public class MathTool
{
   @UnitTest("GCD");
   public static int gcdOf(int num1,int num2)
   {
      //...
   }
}

  @UnitTest("GCD")实际上是 @UnitTest(value="GCD")的简便写法,value也可以是数组值。例如定义一个FunctionTest的Annotation类型。

package ysu.hxy;

public @interface FunctionTest
{
  String[] value();
}

 在使用此段代码定义的Annotation时,可以写成@Functiontest({"method1","method2"})这样的简便形式,或是

@Functiontest(value={"method1","method2"}) 这样的详细形式,也可以对value成员设定默认值,使用default关键词即可。

package ysu.hxy;

public @interface UnitTest2
{
   String value() default "noMethod";
}

 

这样如果使用@UnitTest2时没有指定value值,则value默认就是noMethod。

  也可以为Annotation定义额外的成员,以提供额外的信息给分析工具。如下例定义使用枚举类型、String与booean类型来定义Annotation的成员。

package ysu.hxy;

public @interface Process
{
   public enum Current  {NONE,REQUIRE,ANALYSIS,DESIGN,SYSTEM};

   Current current() default  Current.NONE;
   String tester();
   boolean ok();
}

 可以用如下的代码来使用这个范例定义Annotation的成员。

package ysu.hxy;

public class Application
{
   @Process
   (
       current = Process.Current.ANALYSIS,
       tester = "Justin Lin",
       ok = true
   )
   public void doSomething()
  {
     //....
  }
}

 当使用@interface自行定义Annotation类型时,实际上是自动继承了java.lang.annotation.Annotation接口,并由编译器自动完成其他产生的细节,并且在定义Annotation类型时,不能继承其他的Annotation类型或接口。定义Annotation类型时也可以使用包机制来管理类,如果在别的包下使用自定义的Annotation,记得使用import告诉编译器类型的包位置。例如:

 

import ysu.hxy.Debug;
public class Test
{
   @Debug
   public void doTest()
   {
   }
}

或是使用完整的Annotation名称, 例如:

public class Test
{
    @ysu.hxy.Debug
    public void doTest()
    {
    }
}

 

 

分享到:
评论

相关推荐

    Spring3.0中Annotion实例

    在Spring 3.0框架中,注解(Annotion)的应用极大地简化了配置和代码的可读性,使得开发者可以更加专注于业务逻辑而非繁琐的XML配置。本实例将深入探讨Spring 3.0中的核心注解,以及如何在实际项目中应用它们。 1. **...

    Struts2 Convention Plugin中文文档 Annotion

    Struts2 Convention Plugin 是从 Struts2.1 版本开始引入的一个插件,它的主要目标是实现 Struts2 框架的零配置。通过约定优于配置的原则,开发者可以更加专注于业务逻辑,减少大量的 XML 配置工作。...

    hibernate annotion API

    Hibernate Annotation API是Hibernate框架的一个重要组成部分,主要用于在Java对象(实体类)上声明数据库映射信息,从而实现对象关系映射(ORM)。自Hibernate 3.3版本开始,Annotation API成为首选的方式,替代了...

    annotation的jar包

    javax.annotation-3.0.jar javax.annotation-3.0.jar javax.annotation-3.0.jar

    Hibernate Annotation jar

    这里面包涵了需要用Hibernate Annotation时,所需要的所有jar包! 现在我们公司在做web项目的时候,已经不用*.hbm.xml这种映射文件了,都是用Annotation(注解)方式来完成实体与表之间的映射关系,这样看起来比用...

    SSH框架搭建

    在本项目中,我们将探讨如何利用Annotion(注解)进行零配置的SSH框架搭建。 首先,让我们了解SSH框架的每个组件: 1. **Struts2**:作为MVC框架,负责处理HTTP请求,解析请求并将其转发到相应的Action类。通过...

    SSH ANNOTATION

    SSH(Secure Shell)是一种网络协议,用于在不安全的网络上提供安全的远程登录和其他服务。在这个"SSH ANNOTATION"的压缩包中,我们很可能找到了一个关于SSH使用和注解解析的Java Web项目示例。...

    方正书版常见问题分享.pdf

    本资源摘要信息涵盖了方正书版软件中常见的问题和解决方案,涵盖了插入EPS图片、 annotion标记、图片注解、字体错误、PS文件输出等多个方面。 问题1:插入EPS图片 在书版中插入一个EPS图片,后来更新了这个图片但...

    spring-annotion:Spring源码分析以及注解开发

    Spring注解驱动开发,包含一个refresh()方法的流程(在resources目录下) 模块介绍 ---> ext扩展原理包含beanFactoryPostProcessor,BeanDefinitionRegistryPostProcessor和事件监听器等--->...

    自定义Annotation例子

    在Java编程语言中,Annotation(注解)是一种元数据,它提供了一种安全的方法来关联信息和代码(类、方法、变量等)。自定义Annotation允许开发者创建自己的注解类型,以满足特定的需求或规范,例如记录代码元信息、...

    mentor中文教程.pdf

    2. 网表调入:打开新建的PCB文件,运行Forward Annotion(或者运行Design Capture中的PCB Integration),然后将元器件添加到PCB文件中。 3. 修改PCB层数:Setup→Setup Parameters→General→Layers→Number of ...

    Hibernate_学习笔记.

    - **Annotion方式** - `@GeneratedValue`注解用于指定主键生成策略。 - **AUTO**:根据使用的数据库自动选择合适的策略。 - **IDENTITY**:使用数据库自身的自动增长机制。 - **SEQUENCE**:基于序列的主键生成...

    尚学堂Spring学习笔记

    1. 开启注解注入:需要在xml配置文件中加上<context:annotion-config />。 2. 开启组件扫描:需要在xml配置文件中加上”包路径” />。 此外,本文档还记录了@Autowried、@Resource、@Component、@Repository、@...

    Hibernate框架包

    持久化上下文大体内容:1、ORM元数据,JPA支持annotion(注解)或xml两种形式描述对象/关系映射 2、实体操作API,实现对实体对象的CRUD操作 3、查询语言,约定了面向对象的查询语言JPQL(javaPersistence Query ...

    struts2-Annotation

    Struts2是一个非常流行的Java Web框架,它极大地简化了创建MVC(模型-视图-控制器)架构的应用程序。在给定的“struts2-Annotation”主题中,重点是Struts2框架如何利用注解(Annotation)来增强其功能和简化配置。...

    SSH框架开发案例(Annotation版本)

    SSH框架,全称为Spring、Struts和Hibernate,是Java Web开发中的一个经典组合。这个框架集合了Spring的强大功能,Struts的MVC架构,以及Hibernate的持久化处理,为开发者提供了一个高效、灵活且功能丰富的开发环境。...

    common-annotations.jar包

    spring2.5.6框架中的common-annotations.jar包

    Annotation(注解)

    Annotation的概念和作用 @Override注释的功能和用法 @Deprecated注释的功能和用法 @Suppress Warning注释的功能和用法 自定义注释 提取注释信息

    poplar:用于自然语言处理(NLP)的基于Web的注释工具

    白杨 受启发,基于Web的注释工具可满足自然语言处理(NLP)的需求。 白杨树是的新版本,尚未投入生产。 如果发现任何问题,请报告问题。 演示版 参见 快速开始 安装 npm i poplar-annotation ...

    idea-php-annotation-plugin:添加对PhpStorm和IntelliJPHP注释支持

    IntelliJ IDEA / PhpStorm PHP批注 为PhpStorm / IntelliJ IDEA提供PHP... 代码提取 键 值 插件网址 ID ... 变更日志 安装 或直接从PhpStorm安装 必要时使用以下命令强制文件重新索引: File -> Invalidate Cache ...class

Global site tag (gtag.js) - Google Analytics