【发布时间】:2018-07-05 13:32:30
【问题描述】:
变量在使用默认可见性修饰符的类中使用public。为每个成员变量创建了一个 setter 和一个 getter,但在 Kotlin 中你可以这样做:
class Person {
var name: String = "unknown"
}
fun main(args: Array<String>) {
val person = Person()
person.name = "kevvex"
println("${person.name}")
}
由于使用时应用了getter和setter,这是否仍然没有违反封装规则:
person.name = "kevvex"
如果是这样,那怎么可能是封装?该变量仍然是公开的。由于私有可见性修饰符,将其声明为私有将迫使我创建一个 setter 和 getter 来获取变量。
我比较的是 Java,它通常将成员变量设为私有,而每个成员变量都有一个公共的 setter 和 getter。
【问题讨论】:
-
您可以根据需要更改 getter 和 setter 的行为。它们仍然是保护变量的方法。它们只是以更方便的方式调用。
-
暴露一个类的内部字段,不管它是如何实现的 - 是否使用 getter - 总是会破坏封装。
标签: java kotlin encapsulation