我想创建一个方法,该方法将类名作为参数并返回该类的对象,我当前的实现返回一个Object
类型,在需要时将其转换为正确的类型。我的问题是,我可以用通用方法实现这个吗?就像...给出类名并直接返回它的实例?
答案 0 :(得分:4)
如果您需要使用特定(非默认)构造函数创建实例,则可以执行以下操作:
public <T> T createInstanceFrom(Class<T> clazz, Class<?> ... params) {
Constructor<T> constructor = clazz.getConstructor(params);
T result = constructor.newInstance();
return result;
}
请注意,您必须在此处理几种可能的例外情况。
但是,如果你只需要一个可以被默认类构造函数获取的实例,那么你可以这样做:
return clazz.newInstance();
答案 1 :(得分:2)
使用反射:
<your instance> = (<your type>)Class.forName(<your class name>).getDeclaredConstructor(<your constructor parameters>).newInstance(<those constructor parameters>);
当然,您依赖于具有相同参数的所有构造函数。这可以通过适当的单元测试来强制执行。
答案 2 :(得分:1)
您可以这样做:
public static <T> T cst(Class<? extends T> clazz)
{
try
{
return clazz.newInstance();
}
catch (InstantiationException | IllegalAccessException e)
{
return null;
}
}
答案 3 :(得分:1)
public static <T>T getInstance(Class<T> type)
throws Exception {
return type.newInstance();
}