【发布时间】:2011-08-03 12:51:48
【问题描述】:
这是this question about java private constructors 的后续。
假设我有以下课程:
class Foo<T>
{
private T arg;
private Foo(T t) {
// private!
this.arg = t;
}
@Override
public String toString() {
return "My argument is: " + arg;
}
}
如何使用反射构造new Foo("hello")?
回答
基于jtahlborn's answer,以下工作:
public class Example {
public static void main(final String[] args) throws Exception {
Constructor<Foo> constructor;
constructor = Foo.class.getDeclaredConstructor(Object.class);
constructor.setAccessible(true);
Foo<String> foo = constructor.newInstance("arg1");
System.out.println(foo);
}
}
【问题讨论】:
-
它不起作用:( java.lang.NoSuchMethodException: my.package.path.Foo.
(java.lang.Object) at java.lang.Class.getConstructor0(Class.java :2892) 在 java.lang.Class.getDeclaredConstructor(Class.java:2058) 在 ProductCatalogAgentTest.testConnect(ProductCatalogAgentTest.java:461) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
标签: java reflection constructor private