Кажется, здесь никто не упоминается, но вы также можете использовать анонимный класс для хранения аргумента generic type (который обычно теряется из-за стирания типа) :
public abstract class TypeHolder<T> {
private final Type type;
public TypeReference() {
// you may do do additional sanity checks here
final Type superClass = getClass().getGenericSuperclass();
this.type = ((ParameterizedType) superClass).getActualTypeArguments()[0];
}
public final Type getType() {
return this.type;
}
}
Если вы экземпляр этого класса анонимным способом
TypeHolder<List<String>, Map<Ineger, Long>> holder =
new TypeHolder<List<String>, Map<Ineger, Long>>() {};
, тогда такой экземпляр holder
будет содержать неидентифицированное определение пройденного типа.
Это очень удобно для создания валидаторов / десериализаторов. Кроме того, вы можете создавать типичный тип с отражением (так что если вы когда-либо хотели сделать new T()
в параметризованном типе - приветствуется!) [/ G1].
Одно существенное различие между двумя (не упомянутый в блоге, связанном в ответ Jake ), оценка . Увеличения оценки Auth0, довольно быстрые наряду с числом активных пользователей ( источник ), тогда как Автор Firebase свободен использовать; Вы только платите за дополнительные функции как SMS и использование базы данных в случае, если Вам нужно к хранилище дополнительные пользовательские метаданные .
См. этот вопрос для больше о Подлинной оценке Firebase.