6
编译器接受infix +泛型方法,但是使用它的语法是什么? 实施例,所给出的那些2层相同的方法(模任意通用型):我们可以在Kotlin中使用infix通用方法吗?
infix inline fun Int1.plus1(i: Int1) = Int1(this.value + i.value)
infix inline fun <U> Int1.plus2(i: Int1) = Int1(this.value + i.value)
我可以写:
Int1(3).plus1(Int1(4))
Int1(3) plus1 Int1(4)
Int1(3).plus2<Int>(Int1(4))
但这呼叫是无效:
Int1(3) plus2<Int> Int1(4)
有人能解释我为什么?
但让我们说你有一个'Int2'类来扩展'Int1'。然后你有这个函数:'infix inline fun U.print(i:Int)= println(“$ {U :: class} $ i”)'。如果你想让'U'成为'Int1',你可以这样调用它:'Int2(5).print (4)'。是否可以使用中缀表示法进行此调用? –
marstran
@marstran是的,你必须把它的参数转换为预期的类型 'Int2(5)print 4.to(Int1 :: class)' –
这是行不通的。这个论点是一个普通的“Int”。这是'U'型接收机,这是问题所在。我是否必须演员呢?似乎有点奇怪,我只有在处理中缀函数时才需要使用投射。 – marstran