Java泛型之类型未被擦除

你们都知道Java源码在编译以后会擦除泛型信息,如今来看一种泛型未被擦除的状况,见ConcurrentHashMap.comparableClassFor方法。java

ParameterizedType.getActualTypeArguments能获取类所实现的接口中未被擦除的泛型信息。实验以下:spa

public class Parameterized {
    public static void main(String[] args) {
        Type[] types = Integer.class.getGenericInterfaces();
//      Type[] types = HashMap.class.getGenericInterfaces();
        for (Type type: types) {
            System.out.println(type);
            if (type instanceof ParameterizedType) {
                ParameterizedType p = (ParameterizedType) type;
                System.out.println(" -RawType: " + p.getRawType());
                System.out.println(" -OwnerType: " + p.getOwnerType());
                Type[] typeArgs = p.getActualTypeArguments();
                System.out.println(" -ActualTypeArguments:" + Arrays.toString(typeArgs));
            }
        }
    }
}

输出:code

Integer.classblog

java.lang.Comparable<java.lang.Integer>
 -RawType: interface java.lang.Comparable
 -OwnerType: null
 -ActualTypeArguments:[class java.lang.Integer]

HashMap.class接口

java.util.Map<K, V>
 -RawType: interface java.util.Map
 -OwnerType: null
 -ActualTypeArguments:[K, V] interface java.lang.Cloneable
interface java.io.Serializable
相关文章
相关标签/搜索