【问题标题】:How to set the value of property in Kotlin如何在 Kotlin 中设置属性的值
【发布时间】:2017-12-28 21:49:44
【问题描述】:

我试图设置一个属性值,如下面的 sn-p 所示。这个SO question 没有回答这个问题。

var person = Person("john", 24)
        //sample_text.text = person.getName() + person.getAge()
        var kon = person.someProperty
        person.someProperty = "crap" //this doesn't allow me to set value
        kon = "manulilated"  //this allows me to set the value
        sample_text.text = kon

class Person(val n: String, val a: Int){
    var pname: String = n
    var page: Int = a

    var someProperty: String = "defaultValue"
        get() = field.capitalize()
        private set(value){field = value}
    fun Init(nm: String, ag: Int){
        pname = nm
        page = ag
    }

    fun getAge(): Int{
        return page
    }

    fun getName(): String{
        return pname
    }
}

为什么我可以在第二行设置 Person 类的值,但不能在第一行设置?

【问题讨论】:

  • 顺便说一句,提供 getAge()getName() 函数绝对没有意义 - kotlin 自动为所有变量创建 getter(除了那些用 @JvmField 注释的变量)

标签: android kotlin


【解决方案1】:

首先,private 修饰符是您的问题。

改变

private set(value){field = value}

set(value){field = value}
//public by default

否则你不能在类外使用setter。阅读here

对于在类中声明的成员: private 表示仅在该类内部可见(包括其所有成员);

第二,你误会了:

 var kon = person.someProperty
 kon = "manulilated" 

在这些行中,您不会更改对象中的属性。在创建变量kon(作为指向somePropertyString)之后,您将该局部变量重新分配给其他变量。此重新分配不等于更改person.someProperty 的值!它对对象完全没有影响。

【讨论】:

    【解决方案2】:

    someProperty 有一个私人二传手。当 setter 为私有时,不能在类外设置

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-23
      • 2017-12-10
      • 2017-11-19
      • 1970-01-01
      • 1970-01-01
      • 2018-09-25
      相关资源
      最近更新 更多