JsonCodecFactory { public <T> JsonCodec<List<T>> listJsonCodec(Class<T> type) { requireNonNull(type, "type is null"); Type listType = new TypeToken<List<T>>() {} .where(new TypeParameter<T>() {}, type) .getType(); return new JsonCodec<>(createObjectMapper(), listType); } JsonCodecFactory(); @Inject  JsonCodecFactory(Provider<ObjectMapper> objectMapperProvider);  JsonCodecFactory(Provider<ObjectMapper> objectMapperProvider, boolean prettyPrint); JsonCodecFactory prettyPrint(); JsonCodec<T> jsonCodec(Class<T> type); JsonCodec<T> jsonCodec(Type type); JsonCodec<T> jsonCodec(TypeToken<T> type); JsonCodec<List<T>> listJsonCodec(Class<T> type); JsonCodec<List<T>> listJsonCodec(JsonCodec<T> type); JsonCodec<Map<K, V>> mapJsonCodec(Class<K> keyType, Class<V> valueType); JsonCodec<Map<K, V>> mapJsonCodec(Class<K> keyType, JsonCodec<V> valueType);  }
@Test public void testListJsonCodec() { JsonCodec<List<Person>> jsonCodec = jsonCodecFactory.listJsonCodec(Person.class); validateListCodec(jsonCodec); }