Jir*_*ire 2 default interface function kotlin
如果您尝试在接口上创建内联函数,您将面临错误: 'inline' modifier is not allowed on virtual members. Only private or final members can be inlined
我知道这是因为该函数是虚拟的,因为它可以被覆盖。
如果我们能够声明“关闭”函数,这些函数就不会是虚拟的,因此能够被内联,这非常有用!
使用“private”为我们提供了一个非虚拟的、“封闭的”功能,但是世界其他地方无法使用它!
那么..有没有办法为抽象类型定义“封闭的”非虚拟内联函数?
(ps 我打算自己回答这个问题,但请随意分享您自己的答案!)
你说“抽象类型”和抽象类你可以声明一个inline
函数,它自动被认为是最终的。
abstract class BaseThing {
inline fun foo() = "asdf"
}
Run Code Online (Sandbox Code Playgroud)
函数foo
可以被调用,但不能在后代类中被覆盖。这导致错误:
“BaseThing”中的“Foo”是最终的,不能被覆盖
另一方面,接口不能有最终方法。但是您可以为几乎相同的接口编写扩展函数。
interface TraitThing { }
inline fun TraitThing.foo() = "asdf"
Run Code Online (Sandbox Code Playgroud)
但是没有保护或“封闭性”,因为您可以在实现类中实现同名方法,并且它会优先。