Kotlin - 如何在伴随对象中使用类属性

par*_*rsa 6 kotlin

我想知道是否可以在伴生对象中使用类的属性。例如下面的例子:

class Person1(val name: String, var age: Int){
    lateinit var surname: String
    companion object myc{
        var cname: String =""
        var cage: Int = 0
        fun constructor(cname: String, cage: Int){
            this.cage = cage
            this.cname = cname
        }
        fun changeAge(age: Int ?= 0){
//            access to surname or name or age 

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我无法访问 Person1 类的任何属性

例如,我们将类或伴生对象称为如下:

val c1 = Person1.myc.constructor("john",10)
val c2= Person1("jack",20)
Run Code Online (Sandbox Code Playgroud)

我无法通过c1或c2调用changeAge()函数。当 Person1 尚未使用正确的构造函数实例化时,我可以使用 changeAge 的唯一地方是通过 Person1.changeAge() 。我想知道这些操作是否有其他选择,或者如果没有,拥有伴随对象还有什么意义

Ale*_*nov 5

class与 Java 不同,在类中嵌套 a不会自动让您访问该类的实例。这同样适用于objects,包括companion objects。只是让您除了 之外companion还可以引用该对象。Person1Person1.myc

fun constructor不是一个构造函数;这只是一个名为 的方法 constructor

  • 虽然这个答案提到了它不起作用的原因,但我觉得它没有回答“如何”的问题。对于其他有同样感觉的人,请查看 /sf/ask/3070047711/ (3认同)