Il s'agit d'un suivi de cette question sur les constructeurs privés java .
Supposons que j'ai la classe suivante :
class Foo<T>
{
private T arg;
private Foo(T t) {
// private!
this.arg = t;
}
@Override
public String toString() {
return "My argument is: " + arg;
}
}
Comment puis-je construire un new Foo("hello")
en utilisant la réflexion ?
RÉPONSE :
Sur la base de La réponse de jtahlborn les travaux suivants :
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);
}
}
3 votes
Cela ne fonctionne pas :( java.lang.NoSuchMethodException : my.package.path.Foo.<init>(java.lang.Object) at java.lang.Class.getConstructor0(Class.java:2892) at java.lang.Class. getDeclaredConstructor(Class.java:2058) at ProductCatalogAgentTest.testConnect(ProductCatalogAgentTest.java:461) at sun.reflect.NativeMethodAccessorImpl.invoke0(Méthode native)