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

Kotlin打破了封装规则吗?

商正浩
2023-03-14
class Person {
    var name: String = "unknown"
}

fun main(args: Array<String>) {
    val person = Person()
    person.name = "kevvex"
    println("${person.name}")
}
person.name = "kevvex"

如果是这样,那怎么可能是封装呢?变量仍然是公共的。将其声明为private将迫使我创建一个setter和getter来获取变量,因为private可见性修饰符。

我将其与Java进行比较,后者通常将成员变量作为private以及每个成员变量的public setter和getter。

共有1个答案

游安康
2023-03-14

我将其与Java进行比较,后者通常将成员变量作为private以及每个成员变量的public setter和getter。

这实际上就是这个科特林密码中正在发生的事情。name不是一个字段(您称之为成员变量),它是一个带有私有后备字段的属性。如果您修改它的getter和setter:

var name: String
    get() = ...
    set(value: String) { ... }

调用方继续使用

person.name = "kevvex"
private String _name = "unknown";
public String getName() { return _name; }
public void setName(String name) { this._name = name; }
 类似资料:
  • 在Java1.7之前,我很高兴地使用接口来实现OOPs概念封装。意思是如果我想对最终用户隐藏实现,那么我将只与他们共享接口,他们可以使用该接口调用我的API,例如EJB。 在Java1.7之前,上面的都是有效的,现在在Java8中,我可以用和关键字在接口中编写方法的实现,例如: 这在Java1.8中是完全有效的。 现在我的问题是: 顺便说一句,我读过Java文档,其中指出: 默认方法使您可以向库的

  • 问题内容: 我遇到的情况是,可能有很长的单词(如“ hellowordsometext”)或整数(如“ 1234567891122”)之间没有任何空格。请检查此js。http://jsfiddle.net/rzq5e/6/ 达到div宽度后,如何将其分成下一行。现在发生的是,它与div一起扩展 问题答案: 您需要的是,此属性将强制使非空格字符串在 演示版

  • 我正在构建一个ANTLR4语法来解析数据源中的字符串--类似于StringTemplate(如果不是非常相似的话),只是我不喜欢这种语法,所以我正在编写自己的语法(也只是为了好玩和学习,因为这是我第一次使用/ANTLR)。我的语法现在看起来像这样(这是从我的实际情况中简化出来的,但我已经验证了它是一个“好例子”,并且展示了我所问的相同的问题): 这个语法工作得很好,允许我执行替换,例如: 结果是:

  • 我通过anaconda使用tensorflow cpu,在使用命令之后 gpu安装 我收到以下错误信息 File"",第1行,在runfile('C:/用户/g/桌面/大师-项目/高斯ROC示例/神经网络工作Example.py',wdir='C:/用户/g/桌面/大师-项目/高斯ROC示例') 文件“C:\ProgramData\Anaconda3\lib\site packages\spyde

  • 由来 编码中我们常常需要调试输出一些信息,除了打印日志,最长用的要数System.out和System.err 比如我们打印一个Hello World,可以这样写: System.out.println("Hello World"); 但是面对纷杂的打印需求,System.out.println无法满足,比如: 不支持参数,对象打印需要拼接字符串 不能直接打印数组,需要手动调用Arrays.to