Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.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 - Fatal编程技术网

Java在运行时创建列表

Java在运行时创建列表,java,Java,下面是一个示例程序。注释将失败,我想知道我是否可以创建一个方法来实现在运行时创建列表的功能 import java.util.ArrayList; import java.util.List; public class ListMaker { public static List<?> makeList(Class clazz) { // I want to do something like this return new Ar

下面是一个示例程序。注释将失败,我想知道我是否可以创建一个方法来实现在运行时创建列表的功能

import java.util.ArrayList;
import java.util.List;

public class ListMaker 
{

    public static List<?> makeList(Class clazz)
    {
        // I want to do something like this
        return new ArrayList<clazz>();
    }

    public static void main(String[] args)
    {
        Vo object = new Vo(100);
        ArrayList<Vo> list = makeList(Vo.class);
        list.add(object);
    }
}
class Vo 
{
    int i;
    public Vo(int i){this.i = i;}
}
import java.util.ArrayList;
导入java.util.List;
公共类列表生成器
{
公共静态列表生成列表(clazz类)
{
//我想做这样的事情
返回新的ArrayList();
}
公共静态void main(字符串[]args)
{
Vo对象=新Vo(100);
ArrayList list=makeList(Vo.class);
列表。添加(对象);
}
}
Vo类
{
int i;
公共Vo(inti){this.i=i;}
}

这不是泛型的使用方式,而且在Java中也无法实际执行您要执行的操作(创建一个makeList方法,该方法使用一个类参数返回一个特定的ArrayList,然后将该类参数用作t)

请记住,泛型只是编译器的一个功能,对于类型擦除的影响,当编译为字节码时,
ArrayList
将变得简单(您将只能使用反射类检索有关原始类型参数的详细信息,反射类在运行时从stringized方法签名中提取该信息)


ArrayList中的
T
不是一个变量,您无法在运行时创建一个参数化类型,就像您正在尝试的那样。您可以使用一个普通的旧ArrayList,它包含所有类型的对象,而无需进行类型检查。

main
方法中,
列表的类型是已知的(这是一个
列表
)。在这种情况下,您不需要像一般方法那样传递
对象:

public static <T> List<T> makeList()
{
    return new ArrayList<T>();
}
公共静态列表makeList()
{
返回新的ArrayList();
}
可以通过编写
List=makeList();

但是,我不明白为什么需要一个方法来实现这一点(List=new ArrayList();
有什么问题


如果类型
T
未知,而您所拥有的只是一个
Class
Class
对象,那么您试图做的事情在Java中是没有意义的。在运行时,没有
List
List
这样的事情,因为所有类型信息都被删除了。在运行时只有原始的
List
对象。

是这样吗避免在需要Vo列表时必须写出新的ArrayList()?否则我看不出您可能从中获得什么。谢谢您的回答。我仍在尝试围绕泛型进行思考。这更像是一个假设性问题,试图更好地理解泛型。
import java.util.ArrayList;
import java.util.List;

public class ListMaker 
{

    public static List<?> makeList(Class clazz)
    {
        // I want to do something like this
        return new ArrayList<clazz>();
    }

    public static void main(String[] args)
    {
        Vo object = new Vo(100);
        ArrayList<Vo> list = makeList(Vo.class);
        list.add(object);
    }
}
class Vo 
{
    int i;
    public Vo(int i){this.i = i;}
}