«Неизвестный тип встречается» при использовании общего типа в Firebase GenericTypeIndicator

Я пытаюсь создать класс с общим типом, где я создаю функцию для чтения списка сущностей. И я знаю, что у меня есть 2 способа сделать это: (# 1), прочитав каждую сущность в цикле или (# 2), создайте карту объектов напрямую.

Второй способ выглядит более эффективным, но, к сожалению, GenericTypeIndicator не работает с общим типом – он возвращает IllegalStateException: Unknown type encountered: T когда я использую его в коде:

 Map<String, T> entityMap = dataSnapshot.getValue(new GenericTypeIndicator<Map<String, T>>() {}); 

Так:

  1. Есть ли способ прочитать общий тип объектов непосредственно на карте? (# 2)
  2. Или просто они не являются существенной разницей в производительности, когда просто читают сущности в цикле (# 1)?
 public class SomeClass<T extends KeyEntity> { private final Class<T> mGenericClass; private final String mRefKey; public SomeClass(Class<T> clazz, String refKey) { mGenericClass = clazz; mRefKey = refKey; } public class KeyEntity { private String mKey; public KeyEntity() {} public String getKey() { return mKey; } public void setKey(String key) { mKey = key; } } public interface EntityListListener<T> { abstract public void onEntityListLoaded(List<T> entity); } public void loadAll(final EntityListListener<T> entityListListener) { DatabaseReference dbRef = FireDbUtils.getReference(mRefKey); dbRef.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { List<T> entityList = new ArrayList<>((int) dataSnapshot.getChildrenCount()); // #1 - read each entity in a loop for (DataSnapshot childSnapshot : dataSnapshot.getChildren()) { T entity = dataSnapshot.getValue(mGenericClass); entity.setKey(childSnapshot.getKey()); entityList.add(entity); } // #2 - read all entity into a map // GenericTypeIndicator doesn't like generic type // if used, it returns "IllegalStateException: Unknown type encountered: T" Map<String, T> entityMap = dataSnapshot.getValue(new GenericTypeIndicator<Map<String, T>>() {}); for (Map.Entry<String, T> pair : entityMap.entrySet()) { T entity = pair.getValue(); entity.setKey(pair.getKey()); entityList.add(entity); } entityListListener.onEntityListLoaded(entityList); } @Override public void onCancelled(DatabaseError databaseError) {} }); } 

например. данные:

 { carList: { carKey1: { name: "wife car" }, carKey2: { name: "my best car in the world ever" } }, garageList: { garageKey1: { name: "house garage" }, garageKey2: { name: "top secret garage under main garage" } } }