返回通用对象创建方法的类型

时间:2014-02-06 10:14:15

标签: java class generics reflection

我想创建一个方法,该方法将类名作为参数并返回该类的对象,我当前的实现返回一个Object类型,在需要时将其转换为正确的类型。我的问题是,我可以用通用方法实现这个吗?就像...给出类名并直接返回它的实例?

4 个答案:

答案 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();

    }