zoukankan      html  css  js  c++  java
  • java8范型测试代码

    import java.lang.reflect.GenericArrayType;
    import java.lang.reflect.ParameterizedType;
    import java.lang.reflect.Type;
    import java.lang.reflect.TypeVariable;
    import java.util.Collection;
    import java.util.List;
    
    public class View
    {
        public Collection<String> c;
    
        public T<Integer> tt;
    
        public static void main(String[] args) throws NoSuchFieldException, SecurityException
        {
            T<Integer> t = new T();
            TypeVariable<?>[] cs = t.getClass().getTypeParameters();
            for (TypeVariable<?> c : cs)
            {
                // c instanceof ParameterizedType
                // 必须为false,class上不存在实际类型,只存在声明的类型,所以是TypeVariable
                System.out.println(c + " " + (c instanceof ParameterizedType) + "  " + c.getGenericDeclaration());
            }
            Type type = View.class.getDeclaredField("tt").getGenericType();
            printType(type);
            printType(T2.class.getGenericSuperclass());
            type = T.class.getDeclaredField("o").getGenericType();
            printType(type);
            Type types [] = T.class.getMethods()[0].getGenericParameterTypes();
            for(Type ty:types)
                printType(ty);
        }
    
        static void printType(Type type)
        {
            System.out.println("-----------------------------------------------");
            if (ParameterizedType.class.isAssignableFrom(type.getClass()))
            {
                ParameterizedType pt = (ParameterizedType) type;
                System.out.println("is ParameterizedType...........");
                System.out.println("typeName:" + pt.getTypeName() + "
    ownerType:" + pt.getOwnerType() + "
    rawType:"
                        + pt.getRawType());
                Type[] typs = pt.getActualTypeArguments();
                for (Type tttt : typs)
                    System.out.println(" getActualTypeArguments "+tttt.getTypeName());
            }
            else if (TypeVariable.class.isAssignableFrom(type.getClass()))
            {
                System.out.println("not ParameterizedType  that is TypeVariable");
                TypeVariable t = (TypeVariable) type;
                System.out.println("getGenericDeclaration " + t.getGenericDeclaration());
                System.out.println("name: " + t.getName());
                System.out.println("bounds:" + t.getBounds()[0].getTypeName());
            }
            else if(GenericArrayType.class.isAssignableFrom(type.getClass())) 
            {
                System.out.println("GenericArrayType...");
                GenericArrayType genericArrayType = (GenericArrayType)type;
                printType(genericArrayType.getGenericComponentType());
            }
            else 
            {
                System.out.println("unknow....."+type.getTypeName());
            }
        }
    
        public static class T2<O> extends T<O>
        {
        }
    
        public static class T<O>
        {
            O o;
    
            public void show(List<String>[] pTypeArray, O[] vTypeArray)
            {
            }
        }
    
    }
  • 相关阅读:
    SpringBoot 线程池配置 定时任务,异步任务
    ArcMap 5 同一地区,多图层不能一起显示
    ArcMap 4 完全卸载ArcGIS
    ArcMap 3 矢量数据下载(下载、应用需谨慎)
    ArcMap 2 数据矢量化
    MODIS系列之NDVI(MOD13Q1)九:单一土地类型NDVI及时序图(以耕地类型为例)
    ArcMap 1 矢量数据和栅格数据
    ArcMap 0 (ArcGIS10.2安装(完善版--能解决常见问题))
    MODIS系列之NDVI(MOD13Q1)八:土地利用数据(又称地表覆盖数据)下载
    MODIS系列之NDVI(MOD13Q1)七:时间序列S-G滤波之Python
  • 原文地址:https://www.cnblogs.com/shuiyonglewodezzzzz/p/11164242.html
Copyright © 2011-2022 走看看