首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java getConstructor()方法

Java getConstructor()方法
EN

Stack Overflow用户
提问于 2013-01-05 03:54:35
回答 1查看 938关注 0票数 2
代码语言:javascript
复制
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 :)我用这个修改了我的代码,并且它工作正常

代码语言:javascript
复制
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的成员

这是什么意思?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-05 03:58:37

你误诊了。这不是抛出异常的语句--这是:

代码语言:javascript
复制
ci.newInstance();

您试图为两个构造器都调用它(由于for循环)-所以当它调用无参数构造器时,它会很好,但当它调用带有String参数的构造器时,就不是这样了。根据ci当时引用的构造函数,您必须更改该调用以传入正确数量的参数。

您稍后也会遇到同样的问题:

代码语言:javascript
复制
pcon.newInstance();

这一次,您知道有一个String参数(您刚刚请求了一个带有字符串参数的构造函数),因此您绝对知道应该提供一个String参数,例如

代码语言:javascript
复制
pcon.newInstance("foo");

此外,您应该尝试找出为什么您认为是getConstructor()调用失败。异常应该给你一个堆栈跟踪,在它上面有正确的行...能够准确地诊断问题是很重要的,所以值得看看这一次出了什么问题。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14163979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档