@Override public <R> TypeAdapter<R> create(Gson gson, TypeToken<R> type) { if (type.getRawType() != base) { return null; } Map<Class<?>, TypeAdapter<?>> registeredAdapters = new LinkedHashMap<>(); for (Class<?> clazz : registeredTypes.keySet()) { registeredAdapters.put(clazz, gson.getAdapter(clazz)); } return new FieldTypeAdapter<>(registeredAdapters, registeredTypes); }