/**
* Returns x's Class if it is of the form "class C implements
* Comparable<C>", else null.
* 如果对象x的类型实现了Comparable<C>接口,那么返回x的类型,否则返回nul
* 总之方法的目的就是为了看看x的class是否 implements Comparable<x的class>
*/
static Class<?> comparableClassFor(Object x) {
if (x instanceof Comparable) {
Class<?> c; Type[] ts, as; Type t; ParameterizedType p;
if ((c = x.getClass()) == String.class) // bypass checks String类型直接返回
return c;
//c.getGenericInterfaces()类所实现的所有接口的一个数组
if ((ts = c.getGenericInterfaces()) != null) {
for (int i = 0; i < ts.length; ++i) {
// 如果当前接口t是个泛型接口
// 如果该泛型接口t的原始类型p 是 Comparable 接口
// 如果该Comparable接口p只定义了一个泛型参数
// 如果这一个泛型参数的类型就是c,那么返回c
if (((t = ts[i]) instanceof ParameterizedType) &&
((p = (ParameterizedType)t).getRawType() ==
Comparable.class) &&
(as = p.getActualTypeArguments()) != null &&
as.length == 1 && as[0] == c) // type arg is c
return c;
}
}
}
return null;
}
jdk1.8 hashmap.comparableClassFor方法解析
最新推荐文章于 2021-09-24 17:05:56 发布