Kotlin:类继承了一个包含伴生对象的接口,但无法访问接口中的常量。

6

以下是界面:

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

然后,这是一个示例类(不包括函数体):

class SomeClass : SomeInterface

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

SomeClass.MY_CONST

我该如何解决这个问题?
1个回答

6

伴生对象是不可继承的;它们在定义它们的上下文中是完全限定的(在您的情况下是SomeInterface)。

实质上,您需要编写:

SomeInterface.MY_CONST

好的,谢谢!我希望这是可能的。在Java中这很容易 :D - Mário Henrique
在 Kotlin 中也很容易:只需使用声明的名称即可。但说真的,你想要实现什么?也许我们可以帮助你达到一个可接受的设计。 - marianosimone
我想通过子类调用接口的常量,只是这样。 我不想调用 SomeInterface.MY_CONST 而是 SomeClass.MY_CONST。但是,如果没有办法做到这一点,我将从接口中调用...遗憾。 - Mário Henrique
我在询问是否有一种设计决策让你觉得那将是一个更好的API。还有其他替代方案,比如在其他地方声明常量(记住Kotlin中可以有顶层声明,或者可以定义一个“object”来保存它)。 - marianosimone
这只是为了使代码更简洁而做的。该接口在其他类中使用,而这些类应该具有相同的常量。将其声明为对象并不好,因为它不允许继承。 - Mário Henrique
我的意思是你可以为常量定义一个“对象”,然后保留接口以满足任何继承需求。但是,任何设计考虑都由你自己决定 :) - marianosimone

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接