----
函数 的 参数 或 返回值 类型为 泛型类型 , 则该函数称为 泛型函数 ;
代码示例 : 该代码中 , 泛型函数 logT 的 参数 和 返回值 都是 T 泛型参数 类型 ;
class...----
泛型函数 中 如果涉及到 匿名函数 参数 , 匿名函数 的 参数返回值 都是泛型 的话 , 在该泛型函数 中可能需要使用多个泛型 , 使用不同的字母表示不同的泛型 ;
如果函数中 引入了新的泛型类型...out 关键字 , 可以使 子类泛型对象 赋值给 父类泛型对象 ;
下图中 父类范围 比 子类范围 大 ,
如果 使用 in 关键字 , 则 范围大的父类泛型对象 赋值给 范围小的 子类泛型对象 ,...( 反之就会报错 )
如果 使用 out 关键字 , 则 范围小的子类泛型对象 赋值给 范围大的 父类泛型对象 ; ( 反之就会报错 )
使用了 泛型 out 协变 和 泛型 in 逆变 极大的提高了程序的扩展性...在 Java 中 , 运行时 不知道 泛型参数 的 具体类型 ; 在 Kotlin 中可以 通过 reified 关键字检查 泛型参数类型 ;
Java 中如果想要知道 泛型参数 具体类型 , 通过常规的方法无法实现