【发布时间】:2020-07-04 22:19:10
【问题描述】:
据我了解,物化主要是糖,并且
Java:
static <T> boolean isTypeOf(Object o, Class<T> tClass) {
return tClass.isAssignableFrom(o.getClass());
}
科特林:
inline fun <reified T> Any.isTypeOf(): Boolean = this is T
在我看来是等价的,有什么区别吗? 为什么要内联具有具体类型参数的函数?
【问题讨论】:
-
对内联函数的调用将函数复制到调用站点——这就是内联的含义。因此,对
obj.isTypeOf<Foo>()的调用实际上被替换为obj is Foo。这就是为什么可以为内联函数具体化泛型类型参数的原因。否则 Kotlin 会像 Java 一样遭受类型擦除。