说我有以下内容:
object Foo {
fun Int.negate() = -this
fun negateInt(n: Int) = -n
}
我可以使用negate
在Foo
上调用扩展方法with
:
fun main() {
println(with(Foo) { 5.negate() }) // prints -5
}
我可以在Foo
对象上调用另一个方法:
fun main2() {
println(Foo.negateInt(5)) // prints -5
}
我认为with(Foo) { 5.negate() }
在语法上比Foo.negateInt(5)
稍微偏重,而正文只是一个调用。我找不到更紧凑的方式来执行此调用。我曾希望我可以Foo::negate
来获得函数(Int) -> Int
,其中this
被提升为自变量,就像我可以对普通的非扩展方法一样。例如,val f = Int::toString
将给我一个函数(Int) -> String
,以使f(42)
等效于42.toString()
。如果可以的话,我可以写(Foo::negate)(5)
,它仍然很重,但是比with(Foo) { ... }
少。
真的没有办法明确引用定义为成员的扩展方法吗?
答案 0 :(得分:0)
是的,您可以直接参考。为此,您只需要将扩展功能导入您当前的软件包中即可:
import Foo.negate
然后在您的代码中可以执行以下操作:
println(5.negate())
答案 1 :(得分:0)
也许这是最好的
<str: "StringA":"zero">
<str: "StringB":"second">
<str: "StringC":"null">