我有一个解析字符串的方法调用,而parse方法的第二个参数是它将返回的类型。要解析一个人,我们使用:
Person p = myParser.parse("name=Mike", Person.class);
这很好用,这也适用于列表:
List<Person> lop = myParser.parse(somestring, List.class);
然而,这给了我一个编译器警告,因为我真正想要的是List<Person>.class
,但我无法弄清楚语法。
我该怎么做?
答案 0 :(得分:2)
由于 type erasure ,您无法使用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 :(得分:1)
你可以通过多种方式解决这个问题,但最好的方法是添加方法
List<Person> lop = myParser.parseList(somestring, Person.class);
您的方法将能够“知道”列表元素的类型。
你可以做到这一点的另一种方法是忽略警告,但这可能只是隐藏了问题。