从Java访问嵌套在伴生对象中的Kotlin对象

从Java访问嵌套在伴生对象中的Kotlin对象,java,object,kotlin,kotlin-companion,Java,Object,Kotlin,Kotlin Companion,我在科特林有一个这样的结构 companion object Constants { /** * Collection of fields and values relative to phone books. */ object PhoneBooks { /** * Field indicating the ID of a phone book. * Each phone book must have an

我在科特林有一个这样的结构

companion object Constants {
    /**
     * Collection of fields and values relative to phone books.
     */
    object PhoneBooks {
        /**
         * Field indicating the ID of a phone book.
         * Each phone book must have an unique ID.
         */
        const val PB_ID_KEY = "PB_ID"

        /**
         * Field indicating the status of phone book.
         */
        const val PB_STATUS_KEY = "PB_Status"

        /**
         * One of the possible [PB_STATUS_KEY] values, when the phone book is in indexing state
         * (usually at startup or in update phase).
         */
        const val PB_INDEXING = "Indexing"
        [...]

问题是我必须能够从Java访问子对象中的常量值,但这似乎是不可能的。如何在不改变结构的情况下解决此问题?

在上面的评论中,Nizet演示了如何通过静态导入解决此问题

但是,在查看提供的代码时,我会使用枚举

// kotlin
enum class PhoneBooks(val param:String) {
    PB_ID_KEY("PB_ID"),
    PB_STATUS_KEY("PB_Status"),
    PB_INDEXING("Indexing")

}

// java
System.out.println(PhoneBooks.PB_ID_KEY.getParam());
这里的一大优势是代码可读性 PhoneBooks.PB_ID_KEY以干净的方式将PB_ID_KEY标记为电话簿常量

与Kotlin密封类一样,kolin编译器添加了一些很好的枚举检查(穷举),它们是经过设计的 为模式匹配提供清晰可读的代码

请看这里的@Rolands答案 评论:

在这里使用很好

导入静态com.yourcompany.yourproject.YourClass.Constants.PhoneBooks

然后

PhoneBooks.PB\u ID\u键

它对我很有用!因此,我认为将其作为答案显示是很有用的。

尝试使用界面:)


在这里,使用导入静态com.yourcompany.yourproject.YourClass.Constants.PhoneBooks可以很好地工作
,然后是
电话簿。PB\u ID\u键
。如果您需要一些代表,请更改答案!我不在乎代表,我很高兴看到一个比我更有知识的人给出更详细的答案。但至少我的评论能帮你解围。无论如何,非常感谢你。我认为,一个不太详细的答案也可以为许多其他人打开障碍;)它在应用程序包之外不起作用……当然,我的答案只与问题中发布的代码有关,基于给定的上下文,有许多可能的解决方案
  companion object Constants {
/**
 * Collection of fields and values relative to phone books.
 */
interface PhoneBooks {
    /**
     * Field indicating the ID of a phone book.
     * Each phone book must have an unique ID.
     */
    const val PB_ID_KEY = "PB_ID"

    /**
     * Field indicating the status of phone book.
     */
    const val PB_STATUS_KEY = "PB_Status"

    /**
     * One of the possible [PB_STATUS_KEY] values, when the phone book is in indexing state
     * (usually at startup or in update phase).
     */
    const val PB_INDEXING = "Indexing"
    [...]