Topic: jdk5.0初探--metadata |
Print this page |
1.jdk5.0初探--metadata | Copy to clipboard |
Posted by: savage1984 Posted on: 2004-10-23 20:04 jdk5.0出来有一阵子了,这一次的版本更新不同于以往,它带来了很多里程碑式的革新,SUN将其绰号取名为tiger(虎),这一次的变革将是 Java诞生以来从未有过的,它给我们带来了耳目一新的感觉。在这里,我简单介绍一下metadata,关于泛型可以看我的另一篇文章jdk5.0初探- -generics,其他的一些简单改动,可以参考jdk的文档: 元数据(metadata)可用于编译时的注释,借此被JVM识认,也可以被动态加载进来,在动态调用时读取其注释。事实上注释是一个接口,在编译时被编译成一个独立的文件,以下声明一个简单的注释(Student_Name.java): import java.lang.annotation.*; @Retention(RetentionPolicy.RUNTIME) //说明是用于运行时调用的 @Target(ElementType.METHOD) //说明该注释用于方法 public @interface Student_Name{ String name(); //声明一个简单的注释使用 } 以下是使用注释(Student.java): public class Student{ @Student_Name(name="王文银") public static void speak(){ System.out.println("Hello,World!"); } } 注意这里的语法: @Student_Name(name="王文银"),上面已经声明了这个注释是用于方法的,在方法speak()的声明前使用,当编译器在编译这个文件时,先寻找Student_Name这个注释,然后动态加载进来,同时给了name一个值“王文银”,以下是测试(RunStudent.java): import java.lang.annotation.*; import java.lang.reflect.*; public class RunStudent{ public static void main(String[] args) throws Exception{ for(Method m:Class.forName("Student").getMethods()){ //动态加载Student if(m.isAnnotationPresent(Student_Name.class)){ //表示使用了注释的speak()方法 m.invoke(null); //调用speak()方法。此时屏幕输出Hello,World! Student_Name a=m.getAnnotation(Student_Name.class); //获得方法的注释引用 System.out.println("Name:"+a.name()); //使用注释的方法,从而或得我们声明的 注释 } } } } 最后结果输出: Hello,World! Name:王文银 这样,我们在源文件里所用的注释就可以被编译器所调用,这些更加有助于程序员的动态控制,不需要另外的第三方的文件提供. |
Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1 客服电话 18559299278 客服信箱 714923@qq.com 客服QQ 714923 |