Java泛型列表类与类型

3
我有一个方法调用,它会解析一个字符串,parse 方法的第二个参数是它要返回的类型。要解析 Person,我们可以使用: Person p = myParser.parse("name=Mike", Person.class); 这很好用,对于列表也同样适用: List<Person> lop = myParser.parse(somestring, List.class); 但是,这会给我一个编译器警告,因为我真正想要的是 List<Person>.class,但我无法找出语法。
我该怎么做?
2个回答

2
由于类型擦除,您无法使用List<Person>.class。在运行时,没有List<Person>.class对象。只有一个List.class。(或每个类加载器最多一个)
相反,您可以提供一个允许调用者指定容器类型和其类型参数的方法。例如:
List<Person> lop = myParser.parseList( somestring, Person.class );

或者,如果你想做一张地图:
Map<Person,Integer> map = myParser.parseMap( somestring, Person.class, Integer.class );

1
你可以用多种方法来进行黑客攻击,但最好的方法可能是添加一个方法。
List<Person> lop = myParser.parseList(somestring, Person.class);

你的方法将能够“知道”列表元素的类型。
另一种方法是忽略警告,但这可能只是掩盖问题。

谢谢,我想尝试在一个方法中完成它,并且不想忽略警告。我认为应该有一种指定泛型类类型的方法。 - mikeb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接