服务器网站建设教程视频教程,wordpress 文章 标题,黄江网站仿做,wordpress博客卡Java基础-泛型、形变和GC
本文链接#xff1a;https://blog.csdn.net/feather_wch/article/details/131948105
泛型、形变
1、Gson中TypeToken的作用是什么#xff1f;是如何获得泛型的类型信息的#xff1f;
TypeToken利用匿名内部类会持有泛型的类型信息#xff0c;在…Java基础-泛型、形变和GC
本文链接https://blog.csdn.net/feather_wch/article/details/131948105
泛型、形变
1、Gson中TypeToken的作用是什么是如何获得泛型的类型信息的
TypeToken利用匿名内部类会持有泛型的类型信息在signature中。进行解析。new TypeToken{}.getType();// 生成内部类的class文件里面明确知道了里面T的类型是Fruit
2、数组 用GenricArrayType 代码是field.getGenericType()方法 3、非数组 用ParameterizedType举例MapString, Integer
getActualTypeArugments泛型实际类型-获取数组放的是String、IntegergetRawType原始类型
4、泛型变量 TypeVariable getName名称 如K获取上界和下界 5、通配符 WildcardType 获取到上界和下界
6、形变是什么不变、协变、逆变
协变extends父类引用 子类对象逆变super子类引用 父类对象协变生产者 out T读取泛型数据逆变消费者 in T写入泛型数据不变普通的泛型协变、只读、生产者在RxJava中大量使用用协变把List传入方法中避免内鬼修改协变、修改模式、消费者修改List中数据后交给外界去打印
7、? extends Animal 和 ? extends T 和 T exntends Animal的区别
? extends Animal和? extends T 都是通配符类型参数都是生产者消费者场景下用到的? extends Animal生产者可以保证读取出来的是Animal或者T的子类只能按照Animal和父类读取T exntends Animal限定泛型需要是Animal的子类
8、逆变? super Dog只可以按照Dog子类和Object存入数据但没办法读取
无法确定具体是哪个类只知道是Dog的父类读取时可以按照Object读取(特例)其他情况不能读取
9、上界通配符和下界通配符是指什么
? extends Animal? super Dog
10、Kotlin支持在声明处限定范围
interface CallbackJava不可以只可以声明T
11、Kotlin中协变、逆变一起使用 in INPUT, out OUTPUT 形变和泛型擦除
12、T extends Animal、T super Animal会如何泛型擦除
前者擦除为Animal后者擦除为Object
13、泛型为什么不允许调用构造方法来实例化 new T()?
无法确定T的具体类型的构造方法有多少个参数
14、泛型擦除导致不可以用instanceOf
15、Java中的等于Kotlin中的* 意义和作用一致 16、List? 等价于 List? extends Object
17、数组默认支持协变在运行时才检查容器集合会在编译时检查使用泛型时优先用集合
GC
1、对象被标记为垃圾后不可能再被标记为存活因为不可达。已经找不到地址了。
2、reinterpret(重新解释) 3、为什么Java不允许直接操作内存为了垃圾回收机制。 4、为什么C/C不能有垃圾回收机制因为可以直接访问内存地址 C、C中可以用long保存内存地址在GC后还可以继续用完蛋 5、为什么JVM不去管理C/C分配的内存空间不好管要出事。
6、创建对象 指针碰撞有多线程问题CAS失败重试机制 or TLAB thread local allocate buffer