Фон
Мое понимание Java generics заключается в том, что это полностью функция времени компиляции (в основном сосредоточенная на проверках безопасности типов). Информация о типе для любого универсального класса теряется во время выполнения (удаление типа).
Тем не менее, я вижу, что многие фреймворки кажутся также используют информацию о типах во время выполнения. Например, Google Guice Поставщики. Поставщик guice может создавать и предоставлять новые экземпляры своего универсального типа во время выполнения.
class Container
{
@Inject
public Container(Provider<Content> contentProvider)
{
//This works at Runtime... but How ???
//When type's are not even preserved at runtime, how does the Provider knows it has to instantiate an object of type 'Content'
Content content = contentProvider.get();
}
}
Вопрос
Есть ли какая-либо информация, связанная с универсальными типами, которая также сохраняется во время выполнения. ? Если да, что? Если нет, то как такие библиотеки, как google guice, работают внутри (пример выше)
Есть ли что-то большее в дженериках, чем просто безопасность во время компиляции? Например, есть ли какой-либо вариант использования (кроме обеспечения безопасности времени компиляции), где можно получить преимущество с помощью дженериков?