1) Is that the right way to do it?
2) in the Javadocs, it says:
Creates a new instance of the class represented by this Class object. The class is instantiated as if by a new expression with an empty argument list. The class is initialized if it has not already been initialized.
Ive emphasised some words because I would like to give arguments, more specifically, a String and a Spatial.
I didn’t look too deap but yea that’s how it’s done. I did some google’ing on it some time ago and found a pretty descriptive doc at sun’s site that helped me.
For everybody’s reference… (I just had to do this a few weeks ago…)
// Assuming you want to create 'MyClass'
// 'path' is the path to where 'MyClass' is located
String className = path + "MyClass";
Class someClass = Class.forName(className);
// You need to tell the constructor what types of objects
// it's going to get as parameters. Do that here. I think
// this format works, but didn't try it.
Class[] paramClasses = new Class[] {String.class, int.class};
Constructor ctor = someClass.getConstructor(paramClasses);
// Now create the object with some parameters to the constructor
Object[] params = new Object[] {"Some String", new Integer(3)};
Object newItem = ctor.newInstance(params);
// Now type-cast to get the correct object type.
MyClass abc = (MyClass)newItem;
// You will also need to catch some exceptions, here.
// All of the above is equivalent to:
// MyClass abc = new MyClass("Some String", 3);
That being said.. I feel like I should add that using reflection is generally discouraged. You lose compile-time checking, it's slow, and generally tends to be much more difficult to debug. Sometimes its the best way to go, though.. so it's just a warning.
Hope this helps.
[Edit: This is more or less what the link says. Heh. Oh well.]