【问题标题】:Kotlin - accessing and using constructor parametersKotlin - 访问和使用构造函数参数
【发布时间】:2022-01-27 17:43:58
【问题描述】:

我在接口内的一个类中有这个构造函数(它应该更像是一个静态结构,但现在还可以)

class BinData {
        constructor(card_id: Int,
                    from: Int,
                    to: Int)
    }

我创建了一个实例,我想以映射的形式使用构造函数中的所有属性作为函数的参数

val binData = IConfiguration.BinData(2, 222100, 272099)
memoryConfig.binAdd(1, binData)

当然,当我在 binAdd() 中打印该行时,我得到了 Bin 添加:{1=control.app.activities.IConfiguration$BinData@8bd0008} 这只是对象哈希

解决这个问题的合理方法是什么? 我想过创建一个像 BinData.getdata() 这样的方法,它会返回参数 Map,但我真的不确定是不是这样。

如有任何帮助,我将很高兴。谢谢。

【问题讨论】:

  • 为什么这不是数据类?

标签: java android kotlin dictionary constructor


【解决方案1】:

构造函数参数只能是属性,如果它们在主构造函数中,在{ }之前声明。并且toString() 只会在您的类是数据类或您覆盖toString() 以手动定义此行为时列出属性值。

你应该像这样声明你的类:

data class BinData(
    val card_id: Int,
    val from: Int,
    val to: Int
)

【讨论】:

    【解决方案2】:

    您只是声明了一个接收 3 个参数的构造函数,但您没有指定这些是属性。我建议您使用这些属性设置主构造函数

    class BinData(val card_id: Int,
                  val from: Int,
                  val to: Int)
    

    请注意,我将这些属性指定为val,假设它们是不可变的。如果您需要修改它们,请将它们定义为 var 以使其可变

    如果您的类仅用于保存值而不是逻辑,请考虑使用 data class

    【讨论】:

    • 数据类当然可以保存逻辑。他们只是主要各自领域的持有者。
    • 当然可以,但它们的主要目的是保存数据。这里似乎就是这种情况。即使它们可以保存逻辑,我也不会考虑将用例或存储库建模为数据类
    • 谢谢!这为我做到了。我只知道 python 的数据类,但这正是我需要这种类型的东西
    猜你喜欢
    • 1970-01-01
    • 2019-06-19
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-23
    相关资源
    最近更新 更多