如何从java.lang.Class值创建对象?

时间:2015-09-03 05:41:26

标签: java class

Class c = Integer.class

说我只有c如何从中创建Integer对象?

请注意,它并不一定需要是Integer,我喜欢这样做。

3 个答案:

答案 0 :(得分:1)

您可以使用newInstance()方法。

c.newInstance();

创建例外。

<强>输出:

Caused by: java.lang.NoSuchMethodException: java.lang.Integer.<init>()

<强>更新

对于没有默认(无参数化)构造函数的类,您无法在不知道其类型的情况下创建实例。对于其他人,请参阅以下示例及其输出。

public static void main(String[] args) throws InstantiationException, IllegalAccessException {
    Class stringClass = String.class;
    Class integerClass = Integer.class;

    try {
        System.out.println(stringClass.getConstructor());
        Object obj = stringClass.newInstance();
        if (obj instanceof String) {
            System.out.println("String object created.");
        }

        System.out.println(integerClass.getConstructor());
        obj = integerClass.newInstance();
        if (obj instanceof Integer) {
            System.out.println("String object created.");
        }

    } catch (NoSuchMethodException e) {
        // You can not create instance as it does not have default constructor.
        e.printStackTrace();
    } catch (SecurityException e) {
        e.printStackTrace();
    }
}

输出

public java.lang.String()
String object created.
java.lang.NoSuchMethodException: java.lang.Integer.<init>()
    at java.lang.Class.getConstructor0(Unknown Source)
    at java.lang.Class.getConstructor(Unknown Source)
    at xyz.Abc.main(Abc.java:15)

答案 1 :(得分:0)

由于Integer类的实例为immutable,您需要这样的内容:

public static void main(String args[]) throws Exception {
    Class<?> c = Integer.class;
    Constructor<?>[] co = c.getDeclaredConstructors(); // get Integer constructors
    System.out.println(Arrays.toString(co)); 
    Integer i = (Integer) co[1].newInstance("5"); //call one of those constructors.
    System.out.println(i);
}

O / P:

[public java.lang.Integer(int), public java.lang.Integer(java.lang.String) throws java.lang.NumberFormatException]
5

您需要明确地执行这些操作,因为Integer类不提供 mutators / default构造函数我们通过使用构造函数注入初始化值。

答案 2 :(得分:-2)

试试这个

Class c = Class.forName("package.SomeClass");//If you have any specific class 

然后实例:

Object obj = c.newInstance();

int intObj = (Integer) obj