在Java泛型编程中,很多单词从英文翻译中文后会变味,令人难以理解。在很多讲解Java泛型的中文作品中,对于同一英文单词的翻译也是各不相同,阅读时容易产生误解。在接下来的一段时间,我会针对Java中的泛型、注解等知识点进行学习,期间会出一些文章,作为学习的总结,也方便后来者参考。为了能够统一口径,避免产生误而浪费精力。在此对一些名称做统一说明,暂且称之为术语定义吧。
ParameterizedType
这是在 java.lang.reflect 包中一个接口的名称,很多文章中把它翻译为“参数化类型”,我通过参阅多方资料发现其实这个接口就是对“泛型实例”的说明。所以在之后的文章中,我就把这个接口称之为“泛型实例”。
其实这个接口就是在说明一个带参数的类型,如:Collection<String>,Map<String,Object>等。这看似大家平常所说的泛型,但其实不然。我们大家平时所说的泛型是Collection<E>和Map<K,V>等,而ParameterizedType表示的是泛型(Collection<E>和Map<K,V>等)的一种实例(Collection<String>和Map<String,Object>)。
TypeVariable
这是在 java.lang.reflect 包中一个接口的名称,其全名为:TypeVariable<D extends GenericDeclaration>。很多文章中翻译为“类型变量”,其实这种翻译也没有错。在我阅读了大量的有关TypeVariable的说明后发现其实称它为“泛型变量”更为合适。
其实这个接口是在说明“泛型”中的可变量,也就是Collection<E>和Map<K,V>中的E,K和V。
TypeVariable<D extends GenericDeclaration>
GenericDeclaration
这也是java.lang.reflect包中的一个接口,这个接口在很多文章中的翻译是“通用声明”,我看后直接是N脸蒙B的状态,完全不知道他在说什么。经常大量阅读资料后慢慢其解了,应该称它为“可以声明范型变量的实体”。
在他的定义中说的很明白:“只有实现了这个接口的‘实体’才能声明‘范型变量’”。实现了这个接口的“实体”有哪些呢?如下所示:Class,Constructor,Method。
GenericArrayType
这个也是java.lang.reflect中的接口,如果你翻译成“通用数组类型”那就大错特错了。其实它是用来描述形如A<T>[]或T[]类型的。如此看来称之为“泛型数组”更为适合。
WildcardType
这个是java.lang.reflect中的接口,造成不要翻译作“通配符类型”,其实它是用来描述“泛型”中的通配符表达式(也可以叫泛型参数表达式)的。用于限定“泛型参数”的类型。形如:? extends classA、?super classB。
在以后的文章中就称呼它为“泛型参数表达式”吧。