我是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("}");
}
}
答案 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个参数,即。 i
从0
转到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(", ");
}
}