使用java中的类名在运行时创建对象数组

Waq*_*Ali 9 java object

我们都知道我们可以在字符串格式的类名帮助下创建一个对象.就像我有一个班级名称"测试".运用

Class.forName("Test").newInstance()
Run Code Online (Sandbox Code Playgroud)

我们可以创建该类的对象.

我的问题是,有没有办法使用类名创建对象的数组或数组列表?或者假设我们有一个类的对象,并且可以使用此对象创建该对象的数组或数组列表.

Jon*_*eet 17

要创建数组,可以使用java.lang.reflect.Array及其newInstance方法:

Object array = Array.newInstance(componentType, length);
Run Code Online (Sandbox Code Playgroud)

请注意,返回类型只是Object因为没有办法表达它返回正确类型的数组,而不是通过使它成为通用方法...通常你不希望它.(你肯定不会这样.)即使这样,如果你进去也不会应付int.class.

示例代码:

import java.lang.reflect.*;

public class Test {
    public static void main(String[] args) throws Exception {
        Object array = Array.newInstance(String.class, 10);

        // This would fail if it weren't really a string array
        String[] afterCasting = (String[]) array;
        System.out.println(afterCasting.length);
    }
}
Run Code Online (Sandbox Code Playgroud)

因为ArrayList,真的没有这样的概念 - 类型擦除意味着一个ArrayList并不真正知道它的组件类型,所以你可以创建任何 ArrayList.例如:

Object objectList = new ArrayList<Object>();
Object stringList = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)

在创建之后,这两个对象在类型方面难以区分.


NIN*_*OOP 6

你可以使用Array

Object xyz = Array.newInstance(Class.forName(className), 10);
Run Code Online (Sandbox Code Playgroud)

它有一个方法newInstance(Class,int):

创建具有指定组件类型和长度的新数组.调用此方法等效于创建数组,如下所示:

 int[] x = {length};
 Array.newInstance(componentType, x);
Run Code Online (Sandbox Code Playgroud)