【问题标题】:Java: how create instance having the "Class" object?Java:如何创建具有“类”对象的实例?
【发布时间】:2019-01-30 13:17:51
【问题描述】:

早安,

在类 a 中有一个“类”类型的数据成员,我在构造函数中对其进行了初始化。然后我想创建这个类的对象(实例)。怎么做?

import java.lang.reflect.InvocationTargetException;

public class runMe {
    public static void main(String[] args) throws NoSuchMethodException,
            InstantiationException, IllegalAccessException, InvocationTargetException {
        String testStr = "XXX";
        testClass cls = new testClass(testStr.getClass());
        cls.createInstance();
    }
}

import java.lang.reflect.InvocationTargetException;

public class testClass {
    Class<?> myClass;

    testClass(Class inputClass) {
        this.myClass = inputClass;
    }

    void createInstance() throws NoSuchMethodException,
            InstantiationException, IllegalAccessException, InvocationTargetException {
        myClass.getDeclaredConstructor().newInstance(); // this works
       //QUESTION, how to do something like this (and return, in this example a String):
       myClass anInstance = myClass.getDeclaredConstructor().newInstance();
    }
}

【问题讨论】:

  • 您的anInstance 变量需要具有正确的类型或最不特定超类的类型,即Object。你需要看看泛型。
  • "Object" 解决了我的问题。也许这是不好的做法,但它有效。

标签: java class generics


【解决方案1】:

您想要的是使您的 testClass 类通用。您可以使用类型参数作为 anInstance 的数据类型和 inputClass 类类型的类型参数:

class testClass<T> {
    Class<T> myClass;

    testClass(Class<T> inputClass) {
        this.myClass = inputClass;
    }

    void createInstance() throws NoSuchMethodException, InstantiationException, 
                IllegalAccessException, InvocationTargetException {
        T anInstance = myClass.getDeclaredConstructor().newInstance();
    }
}

您可能希望将T 限制为某些类型,因此您可能也希望将其设为有界。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-18
    • 1970-01-01
    • 2014-06-04
    • 1970-01-01
    • 1970-01-01
    • 2012-07-27
    • 2020-06-18
    相关资源
    最近更新 更多