Reputation: 3628
Is it possible to write a method that could create instances of any specified type?
I think java generics should help, so it might be something like this:
public <U> U getObject(Class klass){
//...
}
Could anyone help me?
Upvotes: 3
Views: 400
Reputation: 147134
I strongly suggest using a factory interface if at all possible, rather than abusing reflection.
public interface MyFactory<T> {
T newInstance();
}
Upvotes: 8
Reputation: 7544
public <U> U genericFactory(Constructor<U> classConstructor, Object..args)
throws
InstantiationException,
IllegalAccessException,
IllegalArgumentException,
InvocationTargetException {
return classConstructor.newInstance(args);
}
You can get a constructor from a Class<U>
object via the getConstructors
method. Via the constructor itself you can get information about the arguments, so there needs to be some extra code outside this factory to fill in the arguments appropriately.
Obviously, this is just as ugly as Peter's answer.
Upvotes: 8
Reputation: 32893
public <U> U getObject(Class<U> klass)
throws InstantiationException, IllegalAccessException
{
return klass.newInstance();
}
There are few `problems' with this method though:
getObject
method doesn't declare it in throws
part.See Class.newInstance() documentation for details.
Upvotes: 9