Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么在Java被翻译成Kotlin之后,属性上的修饰符与Getter和Setter相同,而不是字段?_Kotlin - Fatal编程技术网

为什么在Java被翻译成Kotlin之后,属性上的修饰符与Getter和Setter相同,而不是字段?

为什么在Java被翻译成Kotlin之后,属性上的修饰符与Getter和Setter相同,而不是字段?,kotlin,Kotlin,表示默认的可见性修改器是公共的 但从中可以推断它是私人的 这是矛盾吗?kotlin中属性的默认可见性修饰符是什么 ---------以上是第一个问题--------------- 我没有把财产和土地混为一谈。但我确实对如何访问属性感到困惑 为了解决我的困惑,我实际上应该在编辑的标题中提出这个新问题 下面自我回答。属性(以及函数、类和…)的默认可见性确实是公共的 Koan有点让人困惑,因为Java类有带有公共getter的私有字段。 属性可以看作是字段、getter和可选setter的组合。Koa

表示默认的可见性修改器是公共的

但从中可以推断它是私人的

这是矛盾吗?kotlin中属性的默认可见性修饰符是什么

---------以上是第一个问题---------------

我没有把财产和土地混为一谈。但我确实对如何访问属性感到困惑

为了解决我的困惑,我实际上应该在编辑的标题中提出这个新问题


下面自我回答。

属性(以及函数、类和…)的默认可见性确实是公共的

Koan有点让人困惑,因为Java类有带有公共getter的私有字段。
属性可以看作是字段、getter和可选setter的组合。Koan中的财产有私人和公共getter

例如,如果你写

val age = person.age
然后Kotlin将基本上生成
Person
类的
getAge()
方法,该方法将在内部调用。此方法返回字段本身。 也可以向getter添加行为。您可以在中找到更多信息

因此,这不是一个矛盾,而是一个不同的概念。

kotlin中属性的默认可见性修饰符是什么? 正如文件所说,这是公开的

为什么这些领域不是私有的 在本例中,字段是不可变的,因此没有自动定义的setter。数据类自动拥有getter并使用它们,但它不需要手动调用它们,从而简化了代码的读取

工作实例 此代码:

object X {
    data class Example(val a: String, val b: String)
    @JvmStatic
    fun main(args: Array<String>) {
        val e = Example("a", "b")
        println(e.a)
        println(e.b)
    }
}

(使用IntelliJ IDEA反编译)

属性封装了支持字段支持字段仅在初始化时被直接分配。除初始化之外的所有访问都是通过访问器完成的

  • 因此,Java中字段上的私有修饰符在Kotlin中不再需要
  • Java中getter和setter的公共属性被放置在Kotlin中的属性上(实际上,仍然是getter和setter的属性)

因此,省略的修饰符是
public
,而不是
private

属性不是字段。val字段将没有设置。老实说,我认为您自己的答案更令人困惑。。。但我现在退出了这场讨论。我很高兴你解决了你的问题:-)如果你想澄清你的问题,请编辑原始帖子而不是发布答案。如果你的问题得到了其中一个建议答案的回答,那么就接受其中一个。但是。。。你的问题已经被jratpsell(和我)问过了,还是我遗漏了什么?我不在乎你是否接受。继续接受你自己的,我关心的是,作为一种工具,它的使用方式是否有助于他人(而不仅仅是问问题的人)。你似乎有一种印象(在你的个人资料中),即“99%敌对的下层选民”也是如此,但似乎你对这个网站的运作方式有一个根本性的误解:-/
public static final void main(String[] args) {
    X.Example e = new X.Example("a", "b");
    String var2 = e.getA();
    System.out.println(e.getA());
    var2 = e.getB();
    System.out.println(var2);
}