I know the class name, say \"MyClass\" and want to retrieve the Class
object, ie. MyClass.class for future references. Is ther
You can use:
Class c = Class.forName("com.package.MyClass");
And later instantiate an object:
Object obj = c.newInstance();
EDIT: This is just the simplest use case. As indicated in the comments, you will need to consider constructor arguments and exceptions thrown by the initialization process. The JavaDocs for newInstance has all the details.
If you don't want to specify the full package name, call:
Class.forName("MyClass", true, this.getClass().getClassLoader());
This syntax allows you to reorganize the project, or copy this code into another project, as long as you move MyClass along with it. Thanks to Joachim for reminding me to read the docs!
Class.forName("MyClass")
Read the JavaDoc for details
It sounds like you might be able to use the Class class's static forName method.
It's also worth noting that the above suggestions are correct, but will only work for default (parameterless) constructors. You could also do something like:
public Object newInstance(String className, Object...args) throws Exception {
Class<?> clazz = Class.forName(className);
if(args == null || args.length == 0) {
return clazz.newInstance();
}
List<Class<?>> argTypes = new ArrayList<Class<?>>();
for(Object object : args) {
argTypes.add(object.getClass());
}
Constructor<?> explicitConstructor = clazz.getConstructor(argTypes.toArray(new Class[argTypes.size()]));
return explicitConstructor.newInstance(args);
}