J2SE5.0新特性之元数据

原创 2005年05月31日 23:53:00
元数据,在java中也叫注释、注解。微软的.net从开始设计时就有这个功能,不过它的术语叫属性。

这时一个强大的功能,程序员如果想挣钱,得好好研究它,因为

在将来的j2ee开发中,广泛的使用它,包括ejb的声明,IOC中的注入等。

 

IBM网站有篇文章详细介绍了它,挺好的一篇文章。

http://www-900.ibm.com/developerWorks/cn/java/j-annotate1/

http://www-900.ibm.com/developerworks/cn/java/j-annotate2.shtml

 

我曾兴致勃勃的根据例子在eclipse中测试了一把,可怎么也得不到注释信息。后来,在命令行直接编译java文件,运行才正常。虽然现在的eclipse 编辑器可以识别java的注释语法,但是在编译的时候并没有生成带注释的java类。我没有仔细深究,可能时eclipse在编译的时候枚加上-target 5参数吧,猜测而已。

 

新建一个注释类型,这个类型指明了一本名著的作者和他的email。
  1. package com.kuaff.jdk5;
  2.  
  3. import java.lang.annotation.*;
  4.  
  5. @Retention(RetentionPolicy.RUNTIME)
  6. @Target(ElementType.METHOD)
  7. public @interface BookAuthor 
  8. {
  9.     String name(); 
  10.        String email();
  11. }
  12.  
  13.  

使用这个注释为我们的方法加上注解:
  1. package com.kuaff.jdk5;
  2.  
  3. import java.lang.annotation.Annotation;
  4.  
  5. public class MetadataShow
  6. {
  7.     @BookAuthor(name="曹雪芹",email="caoxueqin@hongloumeng.books"
  8.     public void introHongLouMeng()
  9.     {
  10.         System.out.println("这是一本好书啊");
  11.     }
  12.  
  13.     public static void main(String[] args)
  14.     {
  15.         MetadataShow metadata = new MetadataShow();
  16.         try
  17.         {
  18.             Annotation[] annotation = metadata.getClass().getMethod("introHongLouMeng").getAnnotations();
  19.             for(Annotation  a : annotation)
  20.             {
  21.                 System.out.printf("作者:%s%n", ((BookAuthor)a).name());
  22.                 System.out.printf("他的电子邮件(可能已被注销):%s%n", ((BookAuthor)a).email());
  23.             }
  24.         }
  25.         catch (SecurityException e)
  26.         {
  27.             e.printStackTrace();
  28.         }
  29.         catch (NoSuchMethodException e)
  30.         {
  31.             e.printStackTrace();
  32.         }
  33.     }
  34. }
  35.  
  36.  


 

请注意,要想在程序运行时能读取这些注释,需要在注释的声明的时候加上

@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.METHOD) //也可能时其他类型,如针对声明的注释

 

这是对注释的注释。

编译这两个文件:

javac -source 5 -target 5 -d bin src/com/kuaff/jdk5/*.java

J2SE 5.0新特性(六)静态引入

从J2SE5开始,import不仅可以导入包或者类,还可以导入静态方法和静态域。 我们在导入类时使用import ,而静态导入则使用import static 作为关键字。 静态导入的好处是我们在...

J2SE 5.0新特性(一)枚举

枚举是J2SE5.0引入的新特性。从表面上看Java的枚举与其它语言中使用的枚举相似,只是一个命名整型常量的列表。而事实并非如此,Java中的枚举被定义为了一个类类型。将枚举引入类以后,枚举的...

J2SE 5.0新特性精解

  • 2008年10月10日 17:30
  • 953KB
  • 下载

J2SE 5.0新特性(五)可变长参数

可变长参数是J2SE5新入的一个特性,故名思义就是可以创建数目可变的参数方法,简称varargs方法。 需要将数目不定的参数传递给一个方法的情况很常见,当然在这个新特性被引入之前...

J2SE5.0新特性之使用代理服务器

J2SE1.5也被称为J2SE5.0,在5.0以前的代理服务器设置挺不友好,现在,5.0提供了对通过代理服务器的更加灵活的控制,它可以对http,https,ftp,socks等分别设置,而且还可以设...

J2SE 5.0新特性(四)自动装箱/拆箱

Java是一种面向对象的编程语言,但它同时也提供了基本数据类型(基本数据类型不是面向对象体系的一部分,也不继承自Object注:1),使用基本数据类型而不是对象,是出于性能方面的考虑:因此即使是最简...

J2SE 5.0新特性(二)泛型

Java5.0引入了一个很重要概念就是Generic(泛型),简单的说泛型的引入,可以使们更安全的使用集合类。我们知道集合(List,Set,Map)中可以存储任何类型的数据,而我们在编程中要...

J2SE(TM) 5.0专题 之 语言特性 (完整版)

[版权声明] 作者保留本文的版权。如需转载,请保持文章完整,注明出处,并保留此声明;如需用于商业目的,须作者本人书面许可。作者的联系E-mail: gaoyuxiang@gmail.com  ...

体验J2SE 1.5新特性之增强For循环

1.5提供了另一种形式的for循环。借助这种形式的for循环,可以用更简单地方式来遍历数组和Collection等类型的对象。本文介绍使用这种循环的具体方式,说明如何自行定义能被这样遍历的类,并解释和...
  • ergouge
  • ergouge
  • 2012年05月05日 00:02
  • 358

【J2SE归档总结】0x11 JDK1.6新特性

一:Desktop类和SystemTray类 在JDK1.6中,AWT新增加了两个类:Desktop和SystemTray。 前者可以用来打开系统默认浏览器浏览指定的URL,打开系统默认邮件客户...
  • WCG_BOY
  • WCG_BOY
  • 2012年12月17日 23:35
  • 303
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:J2SE5.0新特性之元数据
举报原因:
原因补充:

(最多只允许输入30个字)