在Kotlin中使用inline
函数实现接口时:
interface Foo {
fun qux(fn: () -> Unit)
}
open class Bar : Foo {
final override inline fun qux(fn: () -> Unit){TODO()}
}
IDE(可能还有编译器)抱怨此消息:
Override by an inline function
要禁止显示此消息,我必须使用@Suppress("OVERRIDE_BY_INLINE")
批注。怎么了?
我已经知道的:
但是,调用最终函数时并非如此。在上面的示例中,当我调用bar.qux()
时,编译器可以确保仅使用此特定实现,并且可以安全地内联。它是否覆盖Foo.qux
方法无关紧要-调用foo.qux
将使用第1点中提到的非内联版本,而调用bar.qux
可以安全地内联。
该警告是否仅是为了确保开发人员意识到这一点?还是有副作用?