Er der en måde at oprette en instans af en bestemt klasse på, hvis man angiver klassens navn (dynamisk) og overfører parametre til dens konstruktør.
Noget i stil med:
Object object = createInstance("mypackage.MyClass","MyAttributeValue");
Hvor "MyAttributeValue"
er et argument til konstruktøren af MyClass
.
Ja, noget i retning af:
Class<?> clazz = Class.forName(className);
Constructor<?> ctor = clazz.getConstructor(String.class);
Object object = ctor.newInstance(new Object[] { ctorArgument });
Det virker selvfølgelig kun for en enkelt strengparameter, men du kan ændre det ret nemt.
Bemærk, at klassens navn skal være fuldt kvalificeret, dvs. inklusive namespace. For indlejrede klasser skal du bruge en dollar (da det er det, som compileren bruger). For eksempel:
package foo;
public class Outer
{
public static class Nested {}
}
For at få objektet Class
til dette, skal du bruge Class.forName("foo.Outer$Nested")
.
Du kan bruge Class.forName()
til at få et Class
objekt af den ønskede klasse.
Brug derefter getConstructor()
til at finde det ønskede Constructor
-objekt.
Til sidst kalder du newInstance()
på dette objekt for at få din nye instans.
Class<?> c = Class.forName("mypackage.MyClass");
Constructor<?> cons = c.getConstructor(String.class);
Object object = cons.newInstance("MyAttributeValue");