import java.util.*;
import java.text.*;
import java.lang.reflect.*;
public class Test {
String name;
public Test()
{
System.out.println("In Construtor");
}
public Test(String name)
{
this.name=name;
System.out.println("In Construtor paramitarized-----"+name);
}
public int q() {
System.out.println("working");
return 1;
}
public static void main(String args[] ) throws Exception {
Class c=Class.forName("Test");
Test t=(Test)c.newInstance();
t.q();
Constructor cons[]=c.getConstructors();
for(Constructor ci:cons)
ci.newInstance();
Constructor<?> pcon=c.getConstructor(String.class);
pcon.newInstance();
System.out.println(Test.class.getName());
}
}我只是想掌握类和ClassLoader类的概念。现在,对于这一行,它显示了IllegalArgumentException:为什么?
谢谢你,Jon Skeet :)我用这个修改了我的代码,并且它工作正常
Class c=Class.forName("Test");
Test t=(Test)c.newInstance();
t.q();
Constructor<?> pcon=c.getConstructor(String.class);
pcon.newInstance("arijit");
System.out.println(Test.class.getName());但是当我使用-Xlint编译时,它给出了下面提到的警告:取消选中call getConstructor(java.lang.Class...)作为原始类型java.lang.Class的成员
这是什么意思?
发布于 2013-01-05 03:58:37
你误诊了。这不是抛出异常的语句--这是:
ci.newInstance();您试图为两个构造器都调用它(由于for循环)-所以当它调用无参数构造器时,它会很好,但当它调用带有String参数的构造器时,就不是这样了。根据ci当时引用的构造函数,您必须更改该调用以传入正确数量的参数。
您稍后也会遇到同样的问题:
pcon.newInstance();这一次,您知道有一个String参数(您刚刚请求了一个带有字符串参数的构造函数),因此您绝对知道应该提供一个String参数,例如
pcon.newInstance("foo");此外,您应该尝试找出为什么您认为是getConstructor()调用失败。异常应该给你一个堆栈跟踪,在它上面有正确的行...能够准确地诊断问题是很重要的,所以值得看看这一次出了什么问题。
https://stackoverflow.com/questions/14163979
复制相似问题