返回动态类的实例

时间:2019-05-14 14:37:05

标签: java reflection

我正在尝试创建一个接收一个类(任何类)并返回该类实例的方法。 (就像“春天”)。我该怎么办呢?

主要:

public static void main(String[] args) {
    Factory factoria = new Factory();
    Auto auto = factoria.getObject(Auto.class);
    System.out.println(auto.Motor);
}

Factory类(getObject是我要尝试的方法):

public Class<?> getObject(Class<?> clase) throws ClassNotFoundException, InstantiationException, IllegalAccessException{

    Class<?> cls = Class.forName(clase.getName());
    Class<?> objetoRaiz = (Class<?>) cls.newInstance();

    // if @Component
    procesar(objetoRaiz);

    return objetoRaiz;      
}

1 个答案:

答案 0 :(得分:1)

最好使用默认构造函数,因为它可能引发异常并在一般情况下处理某些事情。

public <T> T createObject(Class<T> type) throws NoSuchMethodException,
        InstantiationException, IllegalAccessException, InvocationTargetException {   
    return type.getConstructor().newInstance();      
}

或者在使用方面更轻松:

public <T> T createObject(Class<T> type) throws IllegalArgumentException {   
    try {
        return type.getConstructor().newInstance();      
    } catch (NoSuchMethodException | InstantiationException
            | IllegalAccessException | InvocationTargetException e) {
        throw new IllegalArgumentException(e);
    }
}

Holger反馈后:

存在NoSuchMethodExceptionInstantiationExceptionIllegalAccessExceptionInvocationTargetException的通用基类。最好的是:

public <T> T createObject(Class<T> type) throws ReflectiveOperationException  {   
    return type.getConstructor().newInstance();      
}