vis*_*nny -2 java android kotlin
class Sample1 {
private var test = ""
get() = field
set(value) {
field = value
}}
Run Code Online (Sandbox Code Playgroud)
这是我的课。我想将该属性保留为私有,并且必须通过getter和setter访问该属性。
var sample1 = Sample1()
Run Code Online (Sandbox Code Playgroud)
我试图创建一个对象并访问该属性,但是失败了。当我浏览文档时,我会发现一件有趣的事:“ Getters始终具有与属性相同的可见性”。链接
Kotlin的正确方法是什么?
Kotlin将字段,其获取程序和设置程序(如果适用)分组为属性的单个概念。当访问属性时,总是使用更简单的语法调用其getter和setter,恰好与访问Java中的字段相同。但是支持该属性的实际字段是私有的,所有调用都通过getter和setter进行,它们与该属性本身(在您的情况下)具有相同的可见性private。因此,您的课程将翻译为:
public final class Sample1 {
private String test = "";
private String getTest() { return test; }
private void setTest(String test) { this.test = test; }
}
Run Code Online (Sandbox Code Playgroud)
Sample1().text在Java中,您的调用看起来像这样(您实际上可以从调用此Kotlin类的Java代码中执行此操作):
new Sample1().getText();
Run Code Online (Sandbox Code Playgroud)
这就是说,解决方案是将属性的可见性更改为您在Java中设置的getter和setter可见性的任何值,例如,默认的公共可见性:
class Sample1 {
var test = ""
get() = field
set(value) {
field = value
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果没有声明显式的getter和setter,则会自动获得与上述实现相同的功能,因此可以将代码缩短为:
class Sample1 {
var test = ""
}
Run Code Online (Sandbox Code Playgroud)
此最终代码等效于此Java类:
public final class Sample1 {
private String test = "";
public String getTest() { return test; }
public void setTest(String test) { this.test = test; }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3339 次 |
| 最近记录: |