在java中使用类名在运行时创建对象数组
我们都知道,我们可以使用字符串格式的类名来创建对象。就像我有一个类名“Test”。使用 我们可以创建该类的对象在java中使用类名在运行时创建对象数组,java,object,Java,Object,我们都知道,我们可以使用字符串格式的类名来创建对象。就像我有一个类名“Test”。使用 我们可以创建该类的对象 我的问题是,是否有任何方法可以使用类名创建一个数组或对象的数组列表??或者假设我们有一个类的对象,可以使用该对象创建该对象的数组或数组列表。要创建数组,可以使用及其方法: 请注意,返回类型只是Object,因为除了使其成为泛型方法之外,无法表示它返回正确类型的数组。。。这通常是你不希望的。(在您的情况下,您当然不会这样做。)即使这样,如果您传入int.class,它也无法处理 示例代码
我的问题是,是否有任何方法可以使用类名创建一个数组或对象的数组列表??或者假设我们有一个类的对象,可以使用该对象创建该对象的数组或数组列表。要创建数组,可以使用及其方法: 请注意,返回类型只是
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
实际上不知道其组件类型,因此您可以创建任何ArrayList
。例如:
Object objectList = new ArrayList<Object>();
Object stringList = new ArrayList<String>();
objectList=newarraylist();
Object stringList=新建ArrayList();
创建后,这两个对象的类型无法区分。您可以使用
它有一个方法:
创建具有指定组件类型和长度的新阵列。调用此方法相当于创建一个数组,如下所示:
你的意思是“数组列表的数组”还是“数组或数组列表”?数组列表很简单:
new ArrayList()
@jon array或数组列表也许我把OP的问题搞错了,但我把它解释为“我想要一个我创建的类型的数组或数组列表”,所以Object[]array=new Object[length]
就可以了。@Heuster:好吧,这就创建了一个对象[]
,它不是“我创建的类型的数组”。它是一个可以保存他创建的类型的引用的数组,但这是另一回事。@jon“Object array=array.newInstance(componentType,length);”这给了我数组的对象,但我想得到arraylist的对象。我有什么办法可以得到这个吗???@WaqasAli:你读了答案的末尾了吗,它谈到了arraylist?我想你需要读一下类型擦除。@MvG:那不编译。(我试过了。)您可以在变量声明中使用它,但不能作为实例化的一部分。Array.newInstance返回一个对象,而不是object@WaqasAli:它确实创建了一个数组,但无法在方法签名中表示。您希望array.newInstance
的签名是什么?@JonSkeet因为Java有协变类型,我猜Object[]
将是一个有效的返回类型。@JanDvorak:不,如果传入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);
}
}
Object objectList = new ArrayList<Object>();
Object stringList = new ArrayList<String>();
Object xyz = Array.newInstance(Class.forName(className), 10);
int[] x = {length};
Array.newInstance(componentType, x);