Java-Java反射

发布于 2016-10-31 13:40:04 字数 1555 浏览 1185 评论 1

自己写的一个测试,测试一下Constructor类的toGenericString方法,但是老是运行时报错:
java.lang.NoSuchMethodException: test.TestReflectConstructor.<init>(java.lang.String, java.util.Date)
at java.lang.Class.getConstructor0(Class.java:2800)
at java.lang.Class.getConstructor(Class.java:1708)
at test.TestReflectConstructor.main(TestReflectConstructor.java:26)
代码如下

package test;

import java.util.Date;

public class TestReflectConstructor<T1,T2> {
T1 t1;
T2 t2;
public TestReflectConstructor(){
}
public TestReflectConstructor(Class<T1> t1,Class<T2> t2){
try {
this.t1= t1.newInstance();
this.t2= t2.newInstance();
} catch (InstantiationException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
public static void main(String[] args) {
TestReflectConstructor<String,Date> trc=new TestReflectConstructor<String,Date>(String.class,Date.class);
System.out.println("t1: "+trc.t1+" t2: "+trc.t2);
try {
System.out.println(trc.getClass().getConstructor(String.class,Date.class).toGenericString());
} catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夜无邪 2017-02-14 20:47:59

如果你的constructor是这样的:

 public TestReflectConstructor(String t1, Date t2){
}

那么你下面的写法是正确的

 trc.getClass().getConstructor(String.class, Date.class)

但是你的构造器传入的两个参数的类型实际上都是Class,所以

 trc.getClass().getConstructor(Class.class, Class.class)

才是正确的写法。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文