首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Linux频道
中国IT教育
Google
首页 资讯动态 认证考试 新手入门 核心技术 高级技术 J2EE J2ME Java&XML 开源技术 其他技术 RSS订阅 论坛 专题
您现在的位置: 中国IT实验室 >> Java >> J2EE >> EJB >> 正文

Java中的Annotation解析

Java中的Annotation解析之二

 一、Java 中的Annotation的定义

Java中的Annotation

    Java定义了几个标准的meta-annotation,在新Package中java.lang.annotation 中包含了以下meta-annotation:

meta-annotation 说明

    @Target 1. annotation的target是一个被标注的程序元素。target说明了annotation所修饰的对象范围:annotation可被用于packages、types(类、接口、枚举、annotation类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数)。在annotation类型的声明中使用了target可更加明晰其修饰的目标。


meta-annotation 说明
@Target 1. annotation的target是一个被标注的程序元素。target说明了annotation所修饰的对象范围:annotation可被用于packages、types(类、接口、枚举、annotation类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数)。在annotation类型的声明中使用了target可更加明晰其修饰的目标。

2. ElementType的定义

TYPE// Class, interface, or enum (but not annotation)

FIELD// Field (including enumerated values)

METHOD// Method (does not include constructors)

PARAMETER// Method parameter

CONSTRUCTOR// Constructor

LOCAL_VARIABLE// Local variable or catch clause

ANNOTATION_TYPE// Annotation Types (meta-annotations)

PACKAGE// Java package

@Retention 1. SOURCE//按照规定使用注释,但是并不将它保留到编译后的类文件中

2. CLASS//将注释保留在编译后的类文件中,但是在运行时忽略它

3. RUNTIME//将注释保留在编译后的类文件中,并在第一次加载类时读取它
@Documented Documented 表示注释应该出现在类的 Javadoc 中
@Inherited 一个Annotation将被继承

三个标准的Annotation 在java.lang包中:

@Deprecated 对不再使用的方法进行注释
@Override 指明注释的方法覆盖超类的方法
@SuppressWarnings 阻止编译器的警告,例:当类型不安全

下例来说明这三个标准的Annotation:

package sz.starbex.bill.annotation;

import java.util.ArrayList;

import java.util.List;

public class SimpleOverrideAnnotation {

public static void main(String[] args) {

SimpleOverrideAnnotation test = new SimpleOverrideAnnotation();

System.out.println(test.toString());

}

@Override

public String toString() {

return "自己的类自己输出";

}

@Deprecated

public void doSomething() {

System.out.println("方法已过时" );

}

@SuppressWarnings(value={"unchecked"})

public void testSuppressWarnings(){

List testList=new ArrayList();

testList.add("KKKK");//没有使用范型,类型不安全

}

}

二、Annotation使用实例

一个组合的Annotation,注释类的

a. 商标Annotation

package sz.starbex.bill.annotation;

public @interface Trademark {

String name();

String owner();

}

b.License的annotation

package sz.starbex.bill.annotation;

import java.lang.annotation.*;

@Retention(RetentionPolicy.RUNTIME)

@Target({ElementType.TYPE, ElementType.PACKAGE})

public @interface License {

String name();

String notice();

boolean redistributable();

Trademark[] trademarks();

}

c.测试类

package sz.starbex.bill.annotation;

@License(name="Bill",

notice="许可证",

redistributable=true,

trademarks={@Trademark(name="Mercedes",owner="Swedish"),

@Trademark(name="Daewoo",owner="Korean")

}

)

public class TestLicenseAnnotation {

public static void main(String[] args) {

TestLicenseAnnotation test=new TestLicenseAnnotation();

License license=test.getClass().getAnnotation(License.class);

System.out.println("License发放人:"+license.name());

System.out.println("License注意事项:"+license.notice());

System.out.println("License许可:"+license.redistributable());

Trademark [] marks=license.trademarks();

for(Trademark mark:marks){

System.out.println("商标名称:"+mark.name());

System.out.println("商标的使用者:"+mark.owner());

}

}

}

上一页  [1] [2] 

【责编:Peng】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·关于Java框架技术专题
 ·XML全攻略技术专题
 ·JAVA开源技术介绍专题
 ·Java嵌入式开发之J2ME技术专题
 ·超前体验 Oracle 11g的5个新特性…
 ·揭密使用VB.NET的五个实用技巧
 ·Oracle和SQL Server常用函数对比专题…
 ·展现C#世界 C#程序设计专题…
 ·Java入门 Tomcat的配置技巧精华专题…
 ·Oracle RMAN物理备份技术详解…
 今日更新
 社区讨论
 博客论点
 频道精选
 Java 频道导航