Tag: 拳击

Kotlin盒装诠释是不一样的

请帮我理解kotlin文档中的这段代码: val a: Int = 10000 print(a === a) // Prints 'true' val boxedA: Int? = a val anotherBoxedA: Int? = a print(boxedA === anotherBoxedA) // !!!Prints 'false'!!! 现在,我明白了,首先int a = 10000然后在下一行它是使用===进行比较。 现在的问题是,为什么当它分配boxedA=a ,它检查是否为空使用int? 。 它可以写成这样: – val boxedA: Int=a 如果我的理解错误,请有人指导检查一下正确的地方,或者给我解释一下。

替代拳击字符串字段或扩展在Kotlin的所有字符串?

鉴于不能在Kotlin中继承内置类型,我正在寻找一种方法来将特殊方法功能添加到记录中特定类型的字符串字段 ,而不将这些扩展函数应用于所有字符串 (即使在该记录类型中)。 比如说,我在记录中有一些可变的字符串字段,为此我想定义特殊用途的行为。 class Customer { // … var zipcode: String var email: String // … } 对于zipcode ,假设我希望能够通过正则表达式来调用thisCustomer.zipcode.plusFour来获取邮政编码(99999-9999)的+4。 对于email ,假设我希望能够调用thisCustomer.email.domain使正则表达式得到指定电子邮件的@@ company.com部分。 我的目标是: 考虑到客户记录集的大小可能可能是数百万,所以避免将拳击zipcode的运行时间开销放入只有一个内部class Zipcode Zipcode中。 避免必须分配thisCustomer.zipcode.value = "99999-9999"或thisCustomer.zipcode = Zipcode("99999-9999")的语法,如果我最终不得不装箱的话。 避免添加一般的String.plusFour和String.domain扩展属性,即使在Customer类中也是如此……因为邮政编码和电子邮件在技术上可以互相呼叫对方的扩展 我一直在考虑这个问题,并考虑了下面的选项, 子类化字符串: 由于字符串(和所有内置函数)被关闭,所以不可能 将一个接口Zip应用到var声明( var zipcode: String, Zip ): 没有这样的语法,我可以找到 在getter本身中添加内部函数: 语法似乎不存在 使用对象或功能内功能: 想不到一个方法,这个工作,虽然我可能不足够的想象力 我错过了一个明显的解决办法吗? 即使不是很明显,用Kotlin的所有语法魔法,有没有办法让它发生? 也许有一种方法可以完成上述某些/所有的目标而不使用任何这些方法?