gpt4 book ai didi

function - Java 不允许使用最终的默认方法。但是 Kotlin 允许吗?

转载 作者:行者123 更新时间:2023-12-02 12:37:04 24 4
gpt4 key购买 nike

如果您尝试在接口(interface)上创建内联函数,您将面临错误:虚拟成员上不允许使用“inline”修饰符。只有私有(private)或最终成员可以内联

the error pictured in IDEA

我理解这是因为该函数是虚拟的,因为它可以被重写。

如果我们能够声明“封闭”函数,这些函数就不是虚拟的,因此能够内联,这非常有用!

使用“private”为我们提供了一个非虚拟的、“封闭”的功能,但世界其他地方就无法使用它!

那么..有没有办法为抽象类型定义“封闭”非虚拟内联函数?

(p.s.我打算自己回答这个问题,但请随意分享您自己的答案!)

最佳答案

对于“抽象类型”,对于抽象类,您可以声明一个内联函数,并且它会自动被视为最终函数。

abstract class BaseThing {
inline fun foo() = "asdf"
}

函数foo可以被调用,但不能在后代类中被覆盖。这会导致错误:

'Foo' in 'BaseThing' is final and cannot be overridden

另一方面,接口(interface)不能有 final方法。但是您可以为接口(interface)编写一个功能几乎相同的扩展函数。

interface TraitThing { }
inline fun TraitThing.foo() = "asdf"

但是没有保护或“封闭性”,因为您可以在实现类中实现同名的方法,并且它将优先。

关于function - Java 不允许使用最终的默认方法。但是 Kotlin 允许吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38545229/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com