我正在使用Jackson解析对象。有时我需要对象列表。

当我这样使用时

 List<MyObject> mapper.readValue(file , new TypeReference<MyObject>() {})


但是当我像这样使用它时

public class JsonMocksRepository<T>{

    public  T getObject() throws Exception{

        return mapper.readValue(file ,new TypeReference<T>());
    }
}


我需要做什么 ?
基本上我想使用泛型来获取正确的类

最佳答案

这是因为类型擦除。在运行时没有有关T表示的实际类型的信息,因此您的TypeReference实际上就是TypeReference<Object>

如果要使用JsonMocksRepository的通用实例,则需要在构造时注入TypeReference

public class JsonMocksRepository<T>{
  private final TypeReference<T> typeRef;

  public JsonMocksRepository(TypeReference<T> typeRef) {
    this.typeRef = typeRef;
  }

  public T getObject() throws Exception{
    return mapper.readValue(file, typeRef);
  }
}

10-08 16:01