背景
我对Java 泛型的理解是它完全是一个编译时特性(主要关注类型安全检查)。任何泛型类的类型信息都会在运行时丢失(类型擦除)。
尽管如此,我还是看到许多框架似乎也在运行时利用了类型信息。例如,谷歌 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 这样的库如何在内部运行(上例)
泛型不仅仅是编译时安全吗?例如,是否有任何用例(除了确保编译时安全)可以使用泛型获得优势?