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;}
}