以下示例显示了购物清单项目的类,可以将其乘以更改金额。为了能够从任一方向相乘,我需要一个ShoppingListItem
类和Int
类的运算符函数。
我不喜欢类Int
的扩展功能不是ShoppingListItem
类的一部分,因为它在逻辑上与之连接。有任何想法如何将其包装在里面吗?
data class ShoppingListItem(val name: String, val amount: Int = 1) {
operator fun times(num: Int) = ShoppingListItem(this.name, this.amount * num)
}
operator fun Int.times(item: ShoppingListItem) = ShoppingListItem(item.name, item.amount * this)
fun main(args: Array<String>) {
val myItem = ShoppingListItem("Apple")
println(myItem) // ShoppingListItem(name=Apple, amount=1)
println(myItem * 2) // ShoppingListItem(name=Apple, amount=2)
println(3 * myItem) // ShoppingListItem(name=Apple, amount=3)
}
答案 0 :(得分:1)
您不能将其放置在班级内-这将使其成为只能在班级内调用的member extension。
您在这里可以做的最好的事情就是将数据类及其所属的扩展名放在同一文件中。