当前位置: 首页 > 知识库问答 >
问题:

接口的静态实例作为接口的一部分

姚子石
2023-03-14
interface MyInterface {
    fun doSomething()
}
interface MyInterface {
    fun doSomething()
    companion object {
        val CONSTANT = object: MyInterface {
            override fun doSomething() { ... }
        }
    }
}

我也试过:

interface MyInterface {
    fun doSomething()
    object CONSTANT: MyInterface {
            override fun doSomething() { ... }
        }
    }
}

它可以在其他Kotlin文件中工作(我可以编写myInterface.constant),但我必须用Java编写myInterface.constant.instance。这个解决方案似乎最接近我想要的。

有什么解决办法吗?我希望能够用Kotlin和Java编写myInterface.constant,并让它们引用一个实现接口的静态final对象。

我相信我也可以将我的接口转换成一个抽象类,但这是最后的手段。

共有1个答案

仉明知
2023-03-14

无法在接口中使用@jvmstatic的问题在此票证中跟踪:https://youtrack.jetbrains.com/oauth?state=%2fissue%2fkt-6301

现在已经修好了,有评论说

在1.2.30中的“-language-version 1.3”选项下可以进行修复

 类似资料:
  • 问题内容: 为什么我的内部类中没有接口?为什么是天生的?抱歉,如果这是一个愚蠢的问题,我已经尽力一遍又一遍地用Google搜索,但似乎无法将其包裹在脑海中。如为什么不能在内部类/局部类中声明这些? 同样作为一个确认,我们在接口中可以包含静态最终变量的原因是因为它们未指定状态或任何此类实现权?如果我们输了而只使用了final,那么我们需要一个没有意义的实例,因为您无法实例化接口。抱歉,我真的很困惑,

  • 问题内容: 当我试图写这样的东西: 编译器无法编译它。 但是当我写这样的东西时: 并反编译后,我看到了静态初始化: 您能否向我解释这种行为? 问题答案: 您可以具有静态初始化,但不能具有静态块。静态初始化需要静态代码块来实现的事实确实改变了Java语法。 关键是您不打算在接口中包含代码(在Java 8之前),但是可以初始化字段。 顺便说一句,您可以拥有一个嵌套的类或枚举,该类或枚举具有您想要的尽可

  • 此具有方法 我迷路了...有人能解释一下吗

  • 配置 下面的 includes 和 globals 将会在随后的例子中用到: #include "libs3.h" #include <stdlib.h> #include <iostream> #include <fstream> const char access_key[] = "ACCESS_KEY"; const char secret_key[] = "SECRET_KEY"; co

  • 问题内容: 扩展初始化接口时提出的问题?),我们在实例化接口的同时用实现的类对其进行初始化。 我的问题是,为什么首先要使用Interface实例化它?为什么我不能直接用实现的类实例化它?例如。: Doc是接口,而SimpleDoc正在实现它。SimpleDoc有什么问题?mydoc = new SimpleDoc(); 哪里会失败? 问题答案: 通常,最好的方法是依赖系统中的抽象类型(接口或抽象类

  • 问题内容: 当我发现它是一个接口时,我正在阅读接口。我不太了解什么是静态接口,它与常规接口有何不同? 这是接口的定义。此处的文档: Map.Entry 。 问题答案: 我对它不是内部接口的情况感到好奇。 所述改性剂只允许在嵌套类或接口。在您的示例中,嵌套在接口内部。 对于接口,修饰符实际上是可选的。对于接口来说,这种区别是没有意义的,因为它们不包含任何仍然可以访问外部接口的代码。