
108
|
第
5
章
public inline fun <reified R> Iterable<*>.filterIsInstance(): List<R> {
return filterIsInstanceTo(ArrayList<R>())
}
应用于修饰内联函数的 reified 关键字保留了类型,所以返回类型值是 List<R>。
该实现调用了函数 filterIsInstanceTo,该函数接收特定类型的 collection 参
数,并使用原有类型的元素填充它。这个函数也可以直接使用,参见示例 5-36。
示例 5-36:使用实化的类型填充提供的列表
val list = listOf("a", LocalDate.now(), 3, 1, 4, "b")
val all = list.filterIsInstanceTo(mutableListOf())
val strings = list.filterIsInstanceTo(mutableListOf<String>())
val ints = list.filterIsInstanceTo(mutableListOf<Int>())
val dates = list.filterIsInstanceTo(mutableListOf<LocalDate>())
assertThat(all, `is`(list))
assertThat(strings, containsInAnyOrder("a", "b"))
assertThat(ints, ...