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

标记一个仅在Kotlin/Java中使用的fun/property

缑桐
2023-03-14
class MyClass {
    // for use in KOTLIN only DSL style e.g. MyClass() { offset = 1 }
    var offset: Int? = null

    // for use in JAVA only BUILDER style e.g. new MyClass().withOffset(1)
    fun withOffset(value: Int) = apply { offset = value }
}
val myClass = MyClass() { offset = 1 }
MyClass myClass = new MyClass().withOffset(1)

共有1个答案

东郭勇
2023-03-14

您不能隐藏构造函数,但是您可以使用运算符fun invoke创建所谓的假构造函数,其中可以使用@jvmsyntheic注释对Java隐藏它。

为了从kotlin隐藏一个函数,可以使用@deprecated和deprecationlevel.hidden。

注意:@jvmfield将指示编译器不要为您的var生成缺省getter和setter

class MyClass {
    @JvmField
    var offset: Int? = null

    @kotlin.Deprecated(message = "JUST FOR JAVA", level = DeprecationLevel.HIDDEN)
    fun withOffset(value: Int) = apply { offset = value }

    companion object {
        @JvmSynthetic
        operator fun invoke(init: MyClass.() -> Unit) = MyClass().apply(init)
    }
}
MyClass() { offset = 1 }
// or
MyClass { offset = 1 }

Java中的用法:

MyClass().withOffset(1)

资源:

  • 从Kotlin隐藏静态Java方法
  • 在Kotlin中@jvmsynthetic的预期用途是什么?
 类似资料: