我正在将字符串列表转换为特定类型的列表。由于字符串是反序列化的对象,因此可以在gson的帮助下将字符串列表转换为其他类型。我正在使用lambda函数进行转换。
我目前的代码如下:
List<String> myObject = myMethod.get(...);
Type typeObject= new TypeToken<T>(){}.getType();
List<T> myTransformedObject = myObject.stream()
.map(x-> gson.fromJson(x, typeObject))
.collect(Collectors.toList()));
我收到错误消息 - “没有类型变量的实例存在,因此Object确认为T.
我错过了什么?
答案 0 :(得分:1)
如果您想使代码具有通用性,则应使用下一个bounded type parameter的方法:
public <T> List<T> transform(Class<T> type) {
return myObject.stream()
.map(x-> gson.fromJson(x, type))
.collect(Collectors.toList());
}
如上所示,您必须明确提供目标类,否则无法正常工作。
答案 1 :(得分:0)
实际上如果你将类对象传递给 gson.from(x,YourClass.class),它的工作正常:
@Test
public void testStack() throws Exception {
List<String> myObject = asList("{name: John}");
Type typeObject= new TypeToken<Person>(){}.getType();
List<Person> myTransformedObject = myObject.stream()
.map(x-> gson.fromJson(x, Person.class))
.collect(Collectors.toList());
myObject.forEach(System.out::println);
}
class Person {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}