我们都知道我们可以在字符串格式的类名帮助下创建一个对象。就像我有一个班级名称“测试”。使用
Class.forName("Test").newInstance()
我们可以创建该类的对象。
我的问题是有没有办法用类名创建对象的数组或数组列表?或者假设我们有一个类的对象,并且可以使用此对象创建该对象的数组或数组列表。
答案 0 :(得分:17)
要创建数组,您可以使用java.lang.reflect.Array
及其newInstance
方法:
Object array = Array.newInstance(componentType, length);
请注意,返回类型只是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);
}
}
对于ArrayList
,实际上没有这样的概念 - 类型擦除意味着ArrayList
并不真正了解其组件类型,因此您可以创建任何 {{1 }}。例如:
ArrayList
创建之后,这两个对象在类型方面难以区分。
答案 1 :(得分:6)
您可以使用Array
Object xyz = Array.newInstance(Class.forName(className), 10);
它有一个方法newInstance(Class, int):
创建具有指定组件类型和长度的新数组。调用此方法相当于按如下方式创建数组:
int[] x = {length};
Array.newInstance(componentType, x);