看一个函数签名
inline fun <reified T : Comparable<T>, R : Any> Collection<T>.complexTransform(
crossinline predicate: (T) -> Boolean = { true },
noinline keySelector: (T) -> String,
transform: T.() -> R?
): Map<String, List<R>> where T : CharSequence
这个函数的意思是:
- 给 Collection 添加一个扩展方法
- T 必须能比较大小,且是字符序列,且支持泛型具体化
- R 不能是 null 类型
- 接收三个函数参数:过滤条件、键选择器、转换器
- 返回按键分组的转换结果
记录
返回类型(最简单的部分)
: Map<String, List<R>>
返回一个 Map,键是String,值是List<R>
函数名和接收者
Collection<T>.complexTransform
Collection<T>. 表示这是扩展函数,意思是给 Collection 类型"加"了一个方法,可以这样调用:myList.complexTransform(...)
泛型参数
<reified T : Comparable<T>, R : Any>
reified T- 泛型具体化,可以在运行时知道 T 的具体类型: Comparable<T>- T 必须能够比较大小where T : CharSequence- 额外约束,T 还必须是字符序列R : Any- R 不能是 null 类型
参数列表
参数 1:
crossinline predicate: (T) -> Boolean = { true }
crossinline- 内联限制修饰符predicate- 参数名(T) -> Boolean- 函数类型,接收 T 返回 Boolean= { true }- 默认值,默认总是返回 true
参数 2:
noinline keySelector: (T) -> String
noinline- 不内联修饰符- 函数类型:接收 T 返回 String
- 没有默认值,必须传入
参数 3:
transform: T.() -> R?
T.()- 扩展函数类型,T 的方法-> R?- 返回可空的 R 类型
函数修饰符
inline fun
inline - 内联函数,编译时展开,提高性能