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

为什么属性上的修饰符与Getter和Setter相同,而不是在Java转换为静态编程语言后的Field?

厉钊
2023-03-14

官方Ref表示默认的可见性修改器是公开的。

但是从koan数据类可以推断出它是私有的。

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

-以上是初始问题-

我没有把财产和田野混为一谈。但我确实对如何进入财产感到困惑。

为了解决我的困惑,我实际上应该用编辑过的标题问这个新问题。

下面自答。

共有3个答案

司马高明
2023-03-14

属性通过定义封装支持字段。仅当初始化时才直接分配后备字段。除初始化之外的所有访问都是通过访问器完成的。

    < li >因此,在Kotlin中不再需要Java中field上的private修饰符。 < li >而Java中关于getter和setter的public在Kotlin中是放在property上的(实际上,还是针对getter和setter)。

因此,省略的修饰符是公共的,而不是私有的

蔡楚
2023-03-14

医生说这是公开的

在本例中,字段是不可变的,因此没有自动定义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)
    }
}

此方法的主要方法编译为(删除检查和元数据):

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);
}

(使用IntelliJ IDEA反编译)

勾裕
2023-03-14

属性(以及函数和类,以及...)确实是公开的。

Koan有点混乱,因为Java类有私有字段和公共getter。
属性可以看作是field、getter和可选setter的组合。Koan中的属性有一个私有后备字段和一个公共getter。

例如,如果你写

val age = person.age

然后,Kotlin将基本上生成< code>Person类的< code>getAge()方法,该方法将在内部调用。此方法返回字段本身。也可以向getter添加行为。你可以在文档中找到更多的信息。

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

 类似资料:
  • 我是科特林的新手。因此,我在Android Studio中创建了一个kotlin项目,并导入了片段ktx和活动ktx依赖项。在片段中,我右键单击片段,然后转到- 这是我的应用程序。梯度锉

  • 在代码 A1 中,我使用了 语句,因此我认为它不会与 但是我得到以下错误,为什么? 智能转换为“文件”是不可能的,因为“文件名视频”是一个可变属性,此时可能已被更改 此时此刻,我必须使用代码 A2。 代码A1 代码A2 此外,我发现代码B1和代码B2都是正确的。为什么代码B1是正确的,代码A1是错误的? 代码B1 代码B2 添加内容: 1:在Code C中,var aa可能在?. let调用中访问

  • 为什么我可以将Lambda用于类java。lang.Thread,但不用于MyThread? 链接以检查此示例:https://try.kotlinlang.org/#/UserProjects/tbs79qfkh50psp7r3qrdrinrmt/sfkpjq1bjvg4r6d5rmnu6mp4a8

  • 有两种类型的对象属性。 第一种是 数据属性。我们已经知道如何使用它们了。到目前为止,我们使用过的所有属性都是数据属性。 第二种类型的属性是新东西。它是 访问器属性(accessor properties)。它们本质上是用于获取和设置值的函数,但从外部代码来看就像常规属性。 Getter 和 setter 访问器属性由 “getter” 和 “setter” 方法表示。在对象字面量中,它们用 get

  • 我正在使用KotlinPoet和Auto Service自动生成代码。我没有找到任何方法来知道带注释的类是否具有“内部”修饰符,因此我可以使用相同的修饰符创建另一个类。例如: 所以我想使用静态编程语言反射我将能够得到这些信息,但没有运气。 关于如何做到这一点的任何线索?

  • 这里已经阐明了和之间的区别。 但我的问题是,为什么我们要使用关键字?从生成的Java代码角度来看没有区别。 静态编程语言代码: 生成: