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

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

百里修真
2023-03-14

我想知道是否可以在同伴对象中使用类的属性。例如,以贝娄为例:

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 

        }
    }
}
val c1 = Person1.myc.constructor("john",10)
val c2= Person1("jack",20)

我不能通过c1或C2调用changeAge()函数。我可以使用changeAge的唯一地方是通过Person1.changeAge(),当Person1还没有用适当的构造函数实例化时。我想知道这些动作是不是有其他的选择,或者是没有,有同伴对象有什么意义呢

共有1个答案

聂煜
2023-03-14

在类中嵌套class不会自动授予您对该类实例的访问权限,这与Java中的情况不同。这同样适用于对象s,包括同伴对象s。companion只允许您将此对象称为person1以及person1.myc

您的fun constructor不是构造函数;它只是一个名为构造器的方法。

 类似资料:
  • 所以我有下面的代码,用Kotlin写的。 我在最后一条指令行()上得到一个编译错误,编译器说,但我不知道为什么。 我认为同伴对象应该对它们“陪伴”的类的属性具有某种可见性。 (免责声明:此代码正在从Java迁移到Kotlin。在Java版本上,以前是同一个类上的静态方法。) 多谢!

  • 我有一个类包含如下所示同伴对象。 我想在运行时修改同伴对象的属性。我将在这个类中添加数百个属性。所以我要做动态。我使用了这个方法,得到如下错误。

  • 带有同伴对象的简单示例类 值测试可以通过访问,但如何从MyClass的实例访问?如果我有,那么我如何从sample访问测试?不正确....有没有办法? Java,C++,python等都有很简单的解决方案...(我将为每个有帮助的is提供代码示例),我认为kotlin会有一个比使用Java更好的解决方案。 对于在没有对象实例(如工厂)的情况下访问类属性,kotlin companion objec

  • 然而,在同伴对象中使用apply时,我遇到了一个奇怪的意外错误。如果我在a的伙伴对象的函数中使用,我会得到一个错误,这很奇怪,因为我直接对对象的实例调用apply,因此希望我始终能够访问它的公共属性。更不用说,似乎伴侣对象不能设置为,因此错误消息中的建议没有太大帮助。 下面是完整的示例代码: 这是怎么回事?我做错了什么?

  • 在Kotlin的类中,一个对象和一个同伴对象有什么区别? 它的“静态”(我是java方面的)生命周期可能有区别吗?