修饰类型参数
kotlin具有修饰符
可以将泛型
化,并且可以将其作为实际的类型类进行处理,因此可以使用
例如,可以定义如下。
1 2 3 4 5 6 7 8 9 | // ListExt.kt inline fun <reified T> List< T >.filterInstance(): List< T > { val destination = mutableListOf< T >() this.forEach { if (it is T) destination.add(it) } return destination } |
从Kotlin调用
1 2 | val nums = listOf(1, 2f, 3, 4f) val ints = nums.filterIsInstance<Int>() // [1, 3] |
但是当我尝试从java调用它时,
1 2 | List nums = Arrays.asList(1, 2f, 3, 4f); List ints = ListExtKt.filterIsInstance(nums); // error: filterIsInstance has private access in ListExtKt |
只能将
kotlin中的
从Java调用kotlin内联函数时,将直接调用内联函数,因此不会对其进行内联扩展。因此,似乎在尝试使用Java化的函数调用函数时发生错误。