Java开发网 Java开发网
注册 | 登录 | 帮助 | 搜索 | 排行榜 | 发帖统计  

您没有登录

» Java开发网 » Java SE 综合讨论区  

按打印兼容模式打印这个话题 打印话题    把这个话题寄给朋友 寄给朋友    该主题的所有更新都将Email到你的邮箱 订阅主题
flat modethreaded modego to previous topicgo to next topicgo to back
话题锁定
该话题已被锁定 - littledeer1974 , 2004-10-25 20:14
如果您尚不清楚该话题被锁定的原因,请参考论坛规则以及本版公告或者联系本版版主。
作者 jdk5.0初探--metadata
savage1984





发贴: 3
积分: 0
于 2004-10-23 20:04 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
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:王文银

这样,我们在源文件里所用的注释就可以被编译器所调用,这些更加有助于程序员的动态控制,不需要另外的第三方的文件提供.




联想游戏(欢迎跟贴,哈)

话题树型展开
人气 标题 作者 字数 发贴时间
5909 jdk5.0初探--metadata savage1984 1352 2004-10-23 20:04

flat modethreaded modego to previous topicgo to next topicgo to back
  已读帖子
  新的帖子
  被删除的帖子
Jump to the top of page

   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