如何在while循环中进行反射而不进行初始化

时间:2014-08-28 05:13:26

标签: java reflection methods initialization invoke

      Method method;


         try {
            method = m.getClass().getMethod(h);
            } catch (SecurityException e) {

            } catch (NoSuchMethodException e) {

            }


         try {
              //line below wants me to initialize it
              method.invoke(m);
            } catch (IllegalArgumentException e) {

            } catch (IllegalAccessException e) {

            } catch (InvocationTargetException e) {
            }

此代码处于while循环中。当我将Method方法设置为null时,我得到一个空指针异常。如何让我的代码在我的while循环中运行。

2 个答案:

答案 0 :(得分:0)

首先不要默默地忽略异常。在这种情况下,如果您捕获并忽略了第一个例外,则method将为null

答案 1 :(得分:-1)

如果第一个try{}块中存在异常,则您的变量method不会被初始化。这就是你得到编译错误的原因。

试试这个:

public
class ReflectiveCall
{
    public static
    void main(String args[])
    {
        ReflectiveCall m = new ReflectiveCall();
        String h = "foo";

        while (true)
        {
            Method method;
            try
            {
                method = m.getClass().getMethod(h);                   
                method.invoke(m);
            }
            catch (SecurityException e)
            {
            }
            catch (NoSuchMethodException e)
            {
            }
            catch (IllegalArgumentException e)
            {
            }
            catch (IllegalAccessException e)
            {
            }
            catch (InvocationTargetException e)
            {
            }
        }
    }

    public
    void foo()
    {
        System.out.println("foo");
    }
}