Vai ir veids, kā izveidot konkrētas klases eksemplāru, norādot klases nosaukumu (dinamisko) un nododot parametrus tās konstruktoram.
Kaut kas līdzīgs:
Object object = createInstance("mypackage.MyClass","MyAttributeValue");
Kur "MyAttributeValue"
ir MyClass
konstruktora arguments.
Jā, kaut kas līdzīgs:
Class<?> clazz = Class.forName(className);
Constructor<?> ctor = clazz.getConstructor(String.class);
Object object = ctor.newInstance(new Object[] { ctorArgument });
Tas, protams, darbosies tikai ar vienu virknes parametru, bet to var diezgan viegli mainīt.
Ņemiet vērā, ka klases nosaukumam jābūt pilnībā kvalificētam, t. i., ieskaitot vārdu telpu. Ja klases ir ligzdotas, ir jāizmanto dolārs (jo to izmanto kompilators). Piemēram:
package foo;
public class Outer
{
public static class Nested {}
}
Lai iegūtu šīs Class
objektu, ir nepieciešams Class.forName("foo.Outer$Nested")
.
Varat izmantot Class.forName()
, lai iegūtu vēlamās klases Class
objektu.
Pēc tam izmantojiet getConstructor()
, lai atrastu vajadzīgo Constructor
objektu.
Visbeidzot, izsauciet newInstance()
šim objektam, lai iegūtu savu jauno gadījumu.
Class<?> c = Class.forName("mypackage.MyClass");
Constructor<?> cons = c.getConstructor(String.class);
Object object = cons.newInstance("MyAttributeValue");