[英]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個參數,即。 i
從0
到1
,那么您將嘗試訪問
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.