1、参考文章
Java中与泛型相关的接口 之 GenericDeclaration - 简书
ParameterizedType详解 - 94me的博客 - CSDN博客
2、在定义类时,通过在尖括号【<>】内使用K、V等作为类型的占位符。在定义变量时,如果用到这个类,就需要为K、V等类型占位符指定明确的类型。这样就完成从定义到使用的全套操作。
3、尖括号内的K、V等占位符其实就是类的类型变量【TypeVariable】,并且可以通过类的【getTypeParameters】方法获取。当然类也可以限定只接受某些类型,通过【extends】去限制即可。
4、在声明这个类型的变量时,就需要为K、V等占位符填上具体的类型,形成类似【Map<String,Long> map1;】的语句。其中map1的类型就是【Map<String,Long>】,那这个类型是类吗?不是,它是一个组合的类型,【Map】是它的原始类型【RawType】,【<String,Long>】是它的实际参数【ActualTypeArguments】。这个组合类型有一个学名叫做【ParameterizedType】。
5、对于组合类型【Map.Entry<Long,Short>】还有一个【OwnerType】,就是【Map】。