Guice的TypeLiteral如何克服Java通用类型擦除过程?
它行之有效,但如何实现呢?
这里使用的技巧是通用超类型的签名存储在子类中,因此可以 在 擦除后保留 下来 。
如果您创建一个匿名子类new TypeLiteral<List<String>>() {}吉斯可以调用getClass().getGenericSuperclass()它,并得到了java.lang.reflect.ParameterizedType其上存在的方法getActualTypeArguments()来获得List<String>作为一个实例ParameterizedType。
new TypeLiteral<List<String>>() {}
getClass().getGenericSuperclass()
java.lang.reflect.ParameterizedType
getActualTypeArguments()
List<String>
ParameterizedType