Annotation简要用法(Java反射)

来源:互联网 发布:知乎 邮箱注册 编辑:程序博客网 时间:2024/06/11 14:29
package cn.mldn.test;import cn.mldn.annotation.MyAnnotation;import cn.mldn.vo.Student;import java.lang.annotation.Annotation;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;/** * Created by wq on 2017/9/24. */@Retention(value = RetentionPolicy.RUNTIME)@interface FactoryClass{    public String className();}interface Fruit{    public void eat();}class Apple implements Fruit{    @Override    public void eat() {        System.out.println("***吃苹果!");    }}class Orange implements Fruit{    @Override    public void eat() {        System.out.println("***吃橘子! ");    }}@FactoryClass(className = "cn.mldn.test.Apple")class Demo{    public void fun (Object f){        try {            Method met =f.getClass().getMethod("eat");            met.invoke(f);        } catch (NoSuchMethodException e) {            e.printStackTrace();        } catch (IllegalAccessException e) {            e.printStackTrace();        } catch (InvocationTargetException e) {            e.printStackTrace();        }    }}public class TestDemo {    public static void main(String [] args ) throws Exception{        Class<?> cls= Demo.class;//取得demo        Object demoObject= cls.newInstance();        FactoryClass fc=cls.getAnnotation(FactoryClass.class);        String className =fc.className();       Class<?> c=Class.forName(className);       Object obj=c.newInstance();        Method method = cls.getMethod("fun",Object.class);        method.invoke(demoObject,obj);//接口对象传递/*        //取得全部的annotation        Annotation an[]=cls.getAnnotations();        for (int x=0;x<an.length;x++){          MyAnnotation ma=  cls.getAnnotation(MyAnnotation.class);            System.out.println(ma.name());            System.out.println(ma.value());        }*/    }}