Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中使用类名在运行时创建对象数组_Java_Object - Fatal编程技术网

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

在java中使用类名在运行时创建对象数组,java,object,Java,Object,我们都知道,我们可以使用字符串格式的类名来创建对象。就像我有一个类名“Test”。使用 我们可以创建该类的对象 我的问题是,是否有任何方法可以使用类名创建一个数组或对象的数组列表??或者假设我们有一个类的对象,可以使用该对象创建该对象的数组或数组列表。要创建数组,可以使用及其方法: 请注意,返回类型只是Object,因为除了使其成为泛型方法之外,无法表示它返回正确类型的数组。。。这通常是你不希望的。(在您的情况下,您当然不会这样做。)即使这样,如果您传入int.class,它也无法处理 示例代码

我们都知道,我们可以使用字符串格式的类名来创建对象。就像我有一个类名“Test”。使用

我们可以创建该类的对象


我的问题是,是否有任何方法可以使用类名创建一个数组或对象的数组列表??或者假设我们有一个类的对象,可以使用该对象创建该对象的数组或数组列表。

要创建数组,可以使用及其方法:

请注意,返回类型只是
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);