簡體   English   中英

遍歷參數數組-Java Reflection

[英]Iterating through Parameter Array - Java Reflection

我是java的新手,無法弄清楚為什么第二種遍歷參數的方法會引發異常。 有趣的是, param !=null通過,但是稍后我得到ArrayIndexOutofBounds異常。 我看了下面的鏈接。 但這對我沒有幫助。 遍歷方法參數

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("}");

    }

}

您只是在循環越界。

 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個參數,即。 i01 ,那么您將嘗試訪問

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

基本上,這總是會超出范圍,因為您嘗試訪問的數組數要多於元素數。

這里是你如何加入的元素,正確:

好的,錯誤在於:

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

如果params為空,則拋出異常。 示例:params具有in元素。 試圖獲得第0個元素將是無窮無盡的。

為確保不會發生這種情況:

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

在這一行中,如果我大於最后一個索引,則會得到異常:

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

您必須更改為:

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

看起來意圖是在數組上循環並附加“,”(最后一項除外)。 下面應該工作需要檢查邊界條件

        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(", ");
            }
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM