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反射)
最新推荐文章于 2025-04-07 08:13:23 发布
本文介绍了一个使用Java反射和注解技术实现的水果食用模拟程序。通过定义注解`@FactoryClass`来指定实例化哪个实现了`Fruit`接口的类,并利用反射调用其`eat`方法。演示了如何在运行时解析注解信息并创建相应对象。
&spm=1001.2101.3001.5002&articleId=78078749&d=1&t=3&u=39ae93a7dbf04caca38173646d2d8e84)
27万+

被折叠的 条评论
为什么被折叠?



