【问题标题】:Why is this Kotlin class property not public?为什么这个 Kotlin 类属性不公开?
【发布时间】:2019-08-02 00:59:43
【问题描述】:

我有一个应用程序经常使用用 Kotlin 编写的类,这些类可以被其他用 Java 编写的类及其方法访问。

我在 Java 中有以下课程:

public class MyDataClass {
    public String color;
    public String action;
}

我决定将其移至 Kotlin:

class MyDataClass {
    var color: String = ""
    var action: String = ""
}

重新编译后,我现在收到以下错误消息:

/myPath/MyApp.java:[93,20] 颜色在 myapp.command.MyDataClass 中具有私有访问权限

action 出现类似错误。

根据Kotlin reference,类和属性(以及其他一些东西)的默认可见性修饰符是public

为什么这些属性被视为private

【问题讨论】:

  • 因为它是一个带有公共 getter 和公共 setter 的私有字段。你不能直接在 Kotlin 中访问字段,一切都是属性。

标签: java kotlin access-modifiers


【解决方案1】:

因为它是一个带有公共 getter 和公共 setter 的私有字段。你不能直接在 Kotlin 中访问字段,一切都是属性。

参考:https://kotlinlang.org/docs/reference/properties.html#backing-fields

【讨论】:

  • 谢谢。 “一切都是属性”是什么意思?
  • 如果您声明var something: String,那么它将始终是“私有字段+公共访问器”。在 Java 中,人们通常将这些“属性”称为“属性”,或者至少我记得是这样。
  • 好答案;次要补充:您可以将属性标记为 @JvmField 以将其编译为字段。
  • 啊,是的,这是真的。我不知道为什么我忘了提。
  • @EpicPandaForce 非常感谢您的评论,添加 JvmField 注释解决了让我头疼的问题
猜你喜欢
  • 1970-01-01
  • 2012-09-21
  • 1970-01-01
  • 1970-01-01
  • 2023-01-28
  • 1970-01-01
  • 1970-01-01
  • 2020-03-03
  • 2011-09-06
相关资源
最近更新 更多