官方Ref表示默认的可见性修改器是公开的。
但是从koan数据类可以推断出它是私有的。
这是矛盾吗?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)
}
}
此方法的主要方法编译为(删除检查和元数据):
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反编译)
属性(以及函数和类,以及...)确实是公开的。
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代码角度来看没有区别。 静态编程语言代码: 生成: