如果你在调用JSON.parseObject()方法时,直接传入了一个Class类型的参数,而没有使用TypeReference,那么在解析包含泛型信息的JSON字符串时可能会出现问题。这是因为在Java中,泛型信息是在编译期间进行类型擦除的,运行时并没有保留泛型信息。
举个例子,假设你有一个Person类,其中有一个属性类型是List,你将一个包含Person对象的JSON字符串传给JSON.parseObject()方法,并尝试将其转换成Person对象。如果你在调用JSON.parseObject()方法时,使用了.class的方式来获取Person类的Class对象,例如:
String jsonStr = "{\"name\":\"Alice\", \"hobbies\":[\"swimming\", \"reading\"]}";
Person person = JSON.parseObject(jsonStr, Person.class);
则在运行时,JSON.parseObject()方法会尝试将JSON字符串中的hobbies字段转换成一个List类型的对象。但是由于泛型信息在运行时已经被擦除了,因此它并不知道该如何创建一个List类型的对象,而是会默认创建一个List类型的对象。这样的话,person对象的hobbies属性就会被赋值为一个List对象,而不是一个List对象。
为了解决这个问题,我们需要使用TypeReference类型的对象来告诉JSON.parseObject()方法该如何进行类型转换。TypeReference实际上是一个抽象类,我们可以通过继承它并实现其中的TypeReference#getType()方法,来创建一个匿名类对象,该对象的getType()方法可以返回一个具体的泛型类型。例如,对于上面的例子,我们可以这样写:
String jsonStr = "{\"name\":\"Alice\", \"hobbies\":[\"swimming\", \"reading\"]}";
Person person = JSON.parseObject(jsonStr, new TypeReference<Person>() {});
这样,JSON.parseObject()方法就可以根据TypeReference中的泛型信息,正确地将hobbies字段转换成一个List类型的对象,从而得到正确的person对象。