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()); }*/ } }
Annotation简要用法(Java反射)
最新推荐文章于 2023-07-13 23:06:40 发布