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