日期:2014-05-19  浏览次数:20742 次

Java反射获取构造函数问题
public class test {
public static void main(String[] str) throws Exception{

Class c = A.class;
Constructor con = c.getConstructor(String.class);
con.newInstance("you");

}

class A{
public A(String str){
System.out.println(str);
}
}
}

如果反射获取的是内部类,获取构造函数那里会报 java.lang.NoSuchMethodException 异常,不是内部类就可以运行,为啥呢?

------解决方案--------------------
代码里面不支持变颜色,就再发一次吧!
import java.lang.reflect.Constructor;

public class Test
{
public static void main(String[] str) throws Exception
{
Class c = A.class;

//建议楼主看一下以下几行代码及注释
Constructor[] cons = c.getConstructors();//在这里数组中只有一个元素

for(Constructor ccc : cons)
{
Class[] pas = ccc.getParameterTypes();
for(Class cc : pas)
{
//会打印Test和String两个
//因为内部类的构造函数中默认有一个外围类的引用
System.out.println(cc);
}
}
///////////////////////////////////////////////////
//////////////////////////////////////////////////
Constructor con =  c.getConstructor(Test.class,String.class);//所以这里需要多加一个参数
con.newInstance(new Test(),"you");//这里构造的时候也需要多加一个参数
}

class A
{
public A(String str)
{
System.out.println(str);
}
}
}