gpt4 book ai didi

Java getConstructor() 方法

转载 作者:行者123 更新时间:2023-12-02 03:45:29 27 4
gpt4 key购买 nike

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());
}
}

我只是想掌握类和类加载器类的概念。现在这条线Constructor<?> pcon=c.getConstructor(String.class);它显示 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 进行编译时,它给出了下面提到的警告:取消选中调用 getConstructor(java.lang.Class....) 作为原始类型 java.lang.Class 的成员

这是什么意思?

最佳答案

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

ci.newInstance();

您试图为两个构造函数调用它(由于for循环) - 所以当它调用无参数构造函数时会很好,但不是当它调用带有 String 参数的参数时。您必须更改该调用以传递正确数量的参数,具体取决于 ci 当时引用的构造函数。

稍后您遇到同样的问题:

pcon.newInstance();

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

pcon.newInstance("foo");

此外,您应该尝试找出为什么您认为是 getConstructor() 调用失败了。该异常应该为您提供一个带有正确行的堆栈跟踪...能够准确诊断问题非常重要,因此值得查看这次出了什么问题。

关于Java getConstructor() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14163979/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com