迭代参数数组 - Java反射

时间:2014-07-02 05:57:42

标签: java reflection

我是java的新手,我无法弄清楚为什么迭代参数的第二种方法会引发异常。 有趣的是,param !=null通过但我稍后会遇到ArrayIndexOutofBounds异常。 我看了以下链接。但那并没有帮助我。 Iterating through method parameters

import java.lang.reflect.*;

public class TestReflection {

    public static void main(String[] args) {
    Class<ReflectThis> c = (Class<ReflectThis>)ReflectThis.class;
    System.out.println("public class " + c.getName());
    System.out.println("{");
    Method methods[] = c.getMethods();
    for(Method m : methods)
    {
        if(m.isAccessible())
            System.out.print("    public ");
        else
            System.out.print("    private ");

            System.out.print(m.getName()+"(");
        //System.out.println("Parameteres");
        Parameter[] params = null;
        params = m.getParameters();
            //method 1 for iterating thr params
        for(Parameter p : params)
        {
            if(p ==  null)
                break;
            System.out.print(p.getType()+ " " +p.getName()+",");

        }
        params = m.getParameters();
            //method 2 for iterating thr params
    if(params != null)
        {
            for(int i=0; params[i] != null; i++)
            {
                System.out.print(params[i].getType()+ " " +params[i].getName());
                if(params[i+1] != null)
                    System.out.print(", ");
            }
        }
        System.out.println(");");
    }

    System.out.println("}");

    }

}

4 个答案:

答案 0 :(得分:2)

你只是循环出界。

 for(int i=0; params[i] != null; i++)
 {
      System.out.print(params[i].getType()+ " " +params[i].getName());
      if(params[i+1] != null)
           System.out.print(", ");
 }

如果你有2个参数,即。 i0转到1,然后您将尝试访问

params[1]
params[2] // out of bounds

这基本上总是超出范围,因为你尝试访问的数量超过了数组中元素的数量。

以下是如何正确加入,元素:

答案 1 :(得分:1)

好的,错误在于:

for(int i = 0; params[i].....

如果params为空,则抛出异常。示例:params具有元素。试图获得第0个元素将超出界限。

确保不会发生这种情况:

for(int i = 0; i < params.length && params[i]...

答案 2 :(得分:0)

如果i大于最后一个索引,则在此行中会出现异常:

for(int i=0; params[i] != null; i++)

你必须改为:

for(int i=0; i<params.length; i++)

答案 3 :(得分:0)

看起来意图是在数组上循环并追加“,”除了最后一个条目。下面应该工作 还需要检查边界条件

        for(int i=0; i<params.length; i++)
        {
            if(params[i] != null)
            {
             System.out.print(params[i].getType()+ " " +params[i].getName());

             if(i != params.length-1)
                 System.out.print(", ");
            }
        }