Java 泛型对象创建方法的返回类型

Java 泛型对象创建方法的返回类型,java,class,generics,reflection,Java,Class,Generics,Reflection,我想创建一个方法,该方法将类名作为参数并返回该类的对象,我当前的实现返回一个object类型,该类型在需要时被转换为正确的类型。我的问题是,我可以用一个通用的方法来实现它吗?喜欢给出类名并直接返回其实例?使用反射: =()Class.forName().getDeclaredConstructor().newInstance(); 当然,您依赖于所有具有相同参数的构造函数。这可以通过适当的单元测试来实现。如果需要使用特定(非默认)构造函数创建实例,则可以执行以下操作: public <T

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

使用反射:

=()Class.forName().getDeclaredConstructor().newInstance();

当然,您依赖于所有具有相同参数的构造函数。这可以通过适当的单元测试来实现。

如果需要使用特定(非默认)构造函数创建实例,则可以执行以下操作:

public <T> T createInstanceFrom(Class<T> clazz, Class<?> ... params) {
    Constructor<T> constructor = clazz.getConstructor(params);
    T result = constructor.newInstance();
    return result;
}
return clazz.newInstance();

您可以这样做:

public static <T> T cst(Class<? extends T> clazz)
{
    try 
    {
        return clazz.newInstance();
    }
    catch (InstantiationException | IllegalAccessException e) 
    {
        return null;
    }
}
publicstatictcst(类
publicstatictcetinstance(类类型)
抛出异常{
返回类型:newInstance();
}

你能举个例子吗?你如何从类名派生出正确的泛型类型,即将
字符串
转换为泛型
T
?当然,你可以进行未经检查的强制转换,但这并不比你当前的手动转换有什么改进。@fadytaher你所有可能的类都有一个0-arg构造函数吗?@RohitJain我可以这样做,但如果这个语句在函数中,函数的返回类型应该是什么?@fadytaher:在这种情况下使用泛型:参见kocko的答案。不需要这种类型转换。您的代码可以替换为
clazz.newInstance()
@kocko hmmm请告诉我,假设我有一个名为Part的类,如何使用createInstanceFrom();现在?只需使用提供的方法:
Part intastation=createInstanceFrom(Part.class);
Part instance=Part.class.newInstance();
public static <T> T cst(Class<? extends T> clazz)
{
    try 
    {
        return clazz.newInstance();
    }
    catch (InstantiationException | IllegalAccessException e) 
    {
        return null;
    }
}
public static <T>T  getInstance(Class<T> type)
            throws Exception {
        return type.newInstance();

    }