java - 返回动态类的实例

标签 java reflection

我正在尝试创建一个接收类(任何类)并返回此类的实例的方法。 (就像“ Spring ”)。有了这个代码我该怎么办?

主要:

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

工厂类(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;      
}

最佳答案

最好使用默认构造函数,因为这可能会引发异常并通常会处理某些内容。

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 反馈后:

有一个共同的基类:NoSuchMethodExceptionInstantiationExceptionIllegalAccessExceptionInitationTargetException。最好的是:

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

关于java - 返回动态类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56132993/

相关文章:

java - 为什么 Gson 将一个 LinkedListMultimap map View 序列化为 null?

java - Linux 更新后 JVM 中的错误文件编码

java - 使用 olingo2 更新同一 PUT 和导航链接中的父实体和子实体

Java Bean : Overglorified Associative Arrays?

反射——恢复时间.时间实例

reflection - 如何从字符串中获取有区别的联合案例?

java - 您从哪里获得用于打印预览的 Zebra 打印机字体?

java - 如何从另一个测试中调用测试?

java - 当以字符串形式给出方法名称时,如何调用 Java 方法?

PHP 反射 - 获取方法参数类型作为字符串