是否可以编写一个可以创建任何指定类型实例的方法?
我认为java泛型应该有帮助,所以它可能是这样的:
public <U> U getObject(Class klass){
//...
}
有人可以帮助我吗?
答案 0 :(得分:9)
public <U> U getObject(Class<U> klass)
throws InstantiationException, IllegalAccessException
{
return klass.newInstance();
}
这种方法几乎没有“问题”:
getObject
方法未在throws
部分中声明它。有关详细信息,请参阅Class.newInstance()文档。
答案 1 :(得分:8)
public <U> U genericFactory(Constructor<U> classConstructor, Object..args)
throws
InstantiationException,
IllegalAccessException,
IllegalArgumentException,
InvocationTargetException {
return classConstructor.newInstance(args);
}
您可以通过Class<U>
方法从getConstructors
对象获取构造函数。通过构造函数本身,您可以获取有关参数的信息,因此需要在此工厂外部添加一些额外的代码以适当填充参数。
显然,这和彼得的答案一样难看。
答案 2 :(得分:8)
我强烈建议尽可能使用工厂界面,而不是滥用反射。
public interface MyFactory<T> {
T newInstance();
}