在看java源码时,如果涉及到反射,会经常看到TypeVariable。
那么这玩意到底是个什么东西? 这是个必须要搞清楚的概念,否则很难理解源码的意图是什么?
我在这里先给出结论:这个问题的关键是具体类型和类型变量化。
我很不喜欢官方的Parameterized Type参数化类型的解释,啥玩意儿啊,就不能说人话吗,什么叫参数化类型?!扯淡的说法!
首先要理解具体类型: 比如String, Integer, List等,或者你自己写的Class,这些都是具体类型。
那么为什么会有TypeVariable这个概念,从英语名称的直译也可以看到叫做:类型变量。
换句话说就是类型不确定! 这也就是官方说的狗屎参数化类型!
什么时候会出现这种情况,对了,那就是泛型!
像我们定义泛型时那样:
Map<T, V>
List<U extends V>
BiConsumer<? super T, ? super U>
注意到了上面的T,U,V 这样的东东了吗,这个就是TypeVariable,也就是类型变量。
当我们谈论类型变量化,其实是跟具体类型相对应的。
类型不确定是问题的关键!所以用一个变量去表达类型,你可以理解为它可以代表任意类型。
TypeVariable的本质就是表达一个不确定的类型,具体来说就是一个泛型变量。
所以使用instanceof TypeVariable方法的目的:是判断一个类型是否是泛型变量(T, U),而不是一个具体类型
只要类型不是具体类型,而是一个类型不确定的泛型变量,那么它就是TypeVariable