JDK 5.0 注释 示例

1. 利用注释和反射 实现程序的方法按顺序执行

Order.java
----
import java.lang.annotation.*;
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Order {
int value();
}
-----
Tarena.java

public class Tarena {
@Order(1)
public void studyUnix(){
System.out.println("Unix");
}
@Order(8)
public void studyEJB(){
System.out.println("EJB");
}
@Order(2)
public void studyCoreCpp(){
System.out.println("C++");
}
@Order(3)
public void studyUnixCpp(){
System.out.println("Unix C++");
}
@Order(6)
public void studyHibernate(){
System.out.println("Hibernate");
}
@Order(5)
public void studyJDBC(){
System.out.println("JDBC");
}
@Order(7)
public void studyJavaWeb(){
System.out.println("Servlet JSP Struts");
}
@Order(4)
public void studyCoreJava(){
System.out.println("CoreJava");
}
}

------

RunByOrder.java

import java.lang.reflect.*;
import java.util.*;
public class RunByOrder {
public static void main(String[] args) throws Exception{
Class c=Class.forName("Tarena");
Object o=c.newInstance();

TreeMap tm=new TreeMap();
Method[] ms=c.getMethods();
for(Method m:ms){
if (m.isAnnotationPresent(Order.class)){
Order order=m.getAnnotation(Order.class);
int value=order.value();
tm.put(value,m);
}
}

Set s=tm.keySet();
for(Integer i:s){
Method m=tm.get(i);
m.invoke(o);
}
}
}


====================
2. 注释的属性的写法,与使用
-----------------
Test.java

import java.lang.annotation.*;
@Target(value={ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Test {
String parameter() default "liucy";
}
/*
*@interface A1{
* A2[] value();
*}
*@interface A2{
* String[] value();
*}
*@A1({@A2({"A","B"}),@A2({"C","D"})})
*public void m(){}
*
*
*
*/

-----------
MyClass.java

public class MyClass {
//要测 参数:"liucy"
@Test
public void m1(String s){
System.out.println(s+" m1");
}
public void m2(String s){
System.out.println(s+" m2");
}
//要测 参数:"tangliang"
@Test(parameter="tangliang")
public void m3(String s){
System.out.println(s+" m3");
}

}
--------------
Test1.java

public class Test1 {
public static void main(String[] args) {
MyClass mc=new MyClass();
mc.m1("liucy");
mc.m3("tangliang");
}
}


==============

3. 利用注释及其属性来调用这个类中的方法
--------------

TestEngin.java

import java.lang.reflect.*;
public class TestEngine {
public static void main(String[] args) throws Exception{
//构造对象
String className="MyClass2";
Class c=Class.forName(className);
Object o=c.newInstance();
//获得方法对象
Method[] ms=c.getMethods();
for(Method m:ms){
//判断Test注释在这个方法上是否存在
if (m.isAnnotationPresent(Test.class)){
//获得Test注释对象
Test t=m.getAnnotation(Test.class);
//获得Test注释的parameter属性
String p=t.parameter();
//调用这个方法
m.invoke(o,p);
}
}
}
}

-------------
Test.java

import java.lang.annotation.*;
@Target(value={ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Test {
String parameter() default "liucy";
}
/*
*@interface A1{
* A2[] value();
*}
*@interface A2{
* String[] value();
*}
*@A1({@A2({"A","B"}),@A2({"C","D"})})
*public void m(){}
*
*
*
*/

------------

MyClass.java

public class MyClass2 {
@Test(parameter="Hiloo")
public void p1(String s){
System.out.println("p1 "+s);
}
@Test(parameter="Chenzq")
public void p2(String s){
System.out.println("p2 "+s) ;
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值