Kotlin自动生成它的吸气剂和设置,但我从不参考它们?另外,在Kotlin中编写自定义getter/setter的正确方法是什么?当我说myObj.myVar = 99我觉得我是直接访问myVar的公共领域myObj?这里到底发生了什么?
Vin*_*nce 19
这已经在一些地方得到了回答,但我想我会分享一个具体的例子,让人们从Java/C#/ C/C++过渡到Kotlin,并且我遇到了同样的问题:
我很难理解getterter和setter在Kotlin中是如何工作的,特别是因为它们从未被明确调用过(因为它们是在Java中).因此,我感到不舒服,因为我们只是直接将vars/vals称为字段.所以我做了一个小实验来证明事实并非如此,事实上,当你访问变量/值时,它是在Kotlin中调用的隐式(自动生成的)或显式的getter/setter.不同的是,您没有明确要求默认的getter/setter.
从文档中 - 声明属性的完整语法是:
var <propertyName>: <PropertyType> [= <property_initializer>]
[<getter>]
[<setter>]
Run Code Online (Sandbox Code Playgroud)
我的榜样是
class modifiersEg {
/** this will not compile unless:
* - we assign a default here
* - init it in the (or all, if multiple) constructor
* - insert the lateinit keyword */
var someNum: Int?
var someStr0: String = "hello"
var someStr1: String = "hello"
get() = field // field is actually this.someStr1, and 'this' is your class/obj instance
set(value) { field = value }
// kotlin actually creates the same setters and getters for someStr0
// as we explicitly created for someStr1
var someStr2: String? = "inital val"
set(value) { field = "ignore you" }
var someStr3: String = "inital val"
get() = "you'll never know what this var actually contains"
init {
someNum = 0
println(someStr2) // should print "inital val"
someStr2 = "blah blah blah"
println(someStr2) // should print "ignore you"
println(someStr3) // should print "you'll never know what this var actually contains"
}
Run Code Online (Sandbox Code Playgroud)
我希望这对其他人有帮助吗?
| 归档时间: |
|
| 查看次数: |
4940 次 |
| 最近记录: |