【问题标题】:Kotlin: class inherits of an interface that contains companion object, but doesn't have access to the constants of the interfaceKotlin:类继承了包含伴随对象的接口,但无权访问接口的常量
【发布时间】:2019-01-18 14:30:15
【问题描述】:

界面如下:

interface SomeInterface {
   companion object {
      const val MY_CONST = "the constant"
   }
}

然后,类(没有正文,因为只是一个例子):

class SomeClass : SomeInterface

之后,当我尝试通过 SomeClass 调用常量时,它不允许我:

SomeClass.MY_CONST

我该如何解决这个问题?

【问题讨论】:

    标签: inheritance interface kotlin companion-object


    【解决方案1】:

    Companion objects 不是“可继承的”;它们完全符合定义它们的上下文(SomeInterface,在您的情况下)。

    本质上,您需要编写:

    SomeInterface.MY_CONST
    

    【讨论】:

    • 好的,谢谢!我希望这可能。在java中这很容易:D
    • 在 Kotlin 中也很简单:只需使用声明它的名称即可。不过,说真的,你想达到什么目的?也许我们可以帮助您获得可接受的设计
    • 我想通过子类调用接口的常量,就这样吧。我不想调用 SomeInterface.MY_CONST,而是调用 SomeClass.MY_CONST。但是,如果没有办法做到这一点,我会从接口调用......遗憾的是
    • 我在问是否有一个设计决策让您认为那将是一个更好的 API。还有其他替代方法,例如在其他地方声明常量(请记住,您可以在 Kotlin 中拥有顶级声明,或者您可以定义一个 object 来保存它)
    • 只是为了保持代码更简洁,这个接口用在其他类中,这些类应该有相同的常量。声明为 Object 不好,因为不允许继承。
    猜你喜欢
    • 2016-05-21
    • 2021-12-15
    • 2014-12-24
    • 1970-01-01
    • 2016-08-09
    • 2020-10-17
    • 2019-12-31
    • 1970-01-01
    • 2018-03-13
    相关资源
    最近更新 更多