簡體   English   中英

從 Java 訪問 Kotlin class object

[英]Accessing Kotlin class object from Java

我有一個 Kotlin class 它有一個 class object,例如

public class Foo {
    public class object {
        public val SomeValue : Int = 0
    }
}

如果我從 Java 使用這個 class,我如何訪問 class ZA8CFDE6331BD59EB2ACZ66B8 中的 SomeValue 如果它是具有 static 屬性的 Java class,我只會使用 Foo.SomeValue - 但我不能在這里這樣做。

IntellIJ 顯示我可以訪問Foo.object.$instance ,但$instance沒有 getSomeValue 或類似的東西。 如果我嘗試使用 $instance.SomeValue ,當我構建錯誤消息時會說:

SomeValue 在 Foo.object 中具有私有訪問權限

我正在使用 Kotlin 0.5.1。

作為一種解決方法,您應該能夠使用@JvmField使 Kotlin 字段可見:

@JvmField var addressLocationBox: ToOne? = null

getSomeValue() 的“缺席”是 IDE 中的一個錯誤。 如果你使用它,它編譯正常。 我創建了一個問題:http: //youtrack.jetbrains.com/issue/KT-3337

data class YourClass(@JvmField val name: String)

要為生成的 Java class 設置自定義名稱,請使用 @JvmName 注釋:

Kotlin

@file:JvmName("DemoUtils")

package com.example

class Util

fun getTime() { /*...*/ }

Java

new com.example.Util();
com.example.DemoUtils.getTime();

此外,如果您使用@JvmMultifileClass ,那么:

@file:JvmName("Utils")
@file:JvmMultifileClass

package com.example

fun getDate() { /*...*/ }

Java

com.example.Utils.getDate();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM