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

如何修改Kotlin中伴生对象的属性?

钮边浩
2023-03-14

我有一个类包含如下所示同伴对象。

class Customization {
    companion object {
        var become_member = ""
    }
}

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

fun customizeStrings(key:String, value:String){
    var buckTypes = Customization::class
    var buck = Customization()
    var variableToInvoke  = buckTypes.companionObject!!.memberProperties.find {
        it.name == key
    }
    println(variableToInvoke!!.name)

    if (variableToInvoke  is KMutableProperty<*>) {
     variableToInvoke.setter.call(buck, value) 
    }

}

共有1个答案

胡景澄
2023-03-14

正如@animeshsahu在评论中所说,它显然起到了作用。如果像我这样的人遇到错误,请尝试直接访问目标同伴,如customizationn.companion::class。它拯救了我的一天。

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

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

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

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

  • 问题是我应该把和放在哪里,因为我不能使用带有扩展函数的同伴对象?