当前位置: 代码迷 >> J2SE >> 用反射调用有某个注解的方法,该如何解决
  详细解决方案

用反射调用有某个注解的方法,该如何解决

热度:147   发布时间:2016-04-24 12:28:40.0
用反射调用有某个注解的方法
我想实现的功能是通过run调用Test注解的不带参数无返回值的方法 为什么不能打印出来 invoke难道没执行么?
RUN类代码如下:
Java code
import java.lang.reflect.Method;public class ApplicationRun{      public void run(String className) throws Exception     {        Class<?> classtype = Class.forName(className);        Object obj = classtype.newInstance();        Method[] methods = classtype.getMethods();        for(Method method:methods)        {         if (method.isAnnotationPresent(Test.class))         {             method.invoke(obj,new Object[]{});         }        }     }}

注解代码如下
Java code
import java.lang.annotation.ElementType;import java.lang.annotation.Target;@Target(ElementType.METHOD)public @interface Test{    }

测试类代码如下
Java code
import java.lang.reflect.InvocationTargetException;public class MyClass{     public void method1()     {         System.out.println("method1");     }    @Test    public void method2()    {        System.out.println("method2");    }    @Test    public int add(int a,int b)    {        return a+b;    }    @Test    public void doSomething(String str)    {        System.out.println(str);    }    @Test    public void doSomething2()    {        System.out.println("doSomething2()");    }    public static void main(String[] args) throws Exception    {        String className = MyClass.class.getName();        ApplicationRun testRun = new ApplicationRun();        testRun.run(className);    }}


------解决方案--------------------
是不是Test注解类少了@Retention(value=RUNTIME)

------解决方案--------------------
探讨

大概的原因 我知道了 就是不知道如何判断方法的返回为void,并且是无参的 系统认为我的run方法是把所有含有Test注解的方法输出 ,我用Invoke时没传参 有的方法有参数 所以产生参数异常。谁知道争样通过反射中的getReturnType()来判断方法返回类型是不是void?
  相关解决方案