如何在Kotlin的重载操作符上指定generics?
我正在寻找超载除法运算符“/”,但希望允许指定genericstypes来指导返回值的types。
这是一个例子:
inline operator fun MyType.div(fieldName: String): T { val value = someFunction(fieldName) return convertToExpectedValue(value) }
不幸的是,我无法想出一个方法来明确指定genericstypesT,当它不能被推断。 我想知道是否有像以下这样的工作?
val stringVal = myType / "myField" / "myStringField"
请注意,我知道这一点
myType.div("blah")
作品。 我正在寻找使用运算符“/”的东西。
你将不得不使用一个中间variables,或者(和Kotlin 1.2一样):
val midVal: MyType = myType / "myField" val stringVal: String = midVal / "myStringField" // or with Kotlin 1.2 // I'm not 100% sure about this one actually, so take this with a grain of salt val stringVal = ((myType / "myField") as MyType / "myStringField") as String
最后,答案最终是不能做到的。
我决定去覆盖(),所以我可以得到genericstypes。 我还添加了一个没有明确返回“MyType”generics的版本,以便链接调用可以使用只在最后需要的genericstypes。
所以现在看起来像:
val stringVal = myType("fieldName")("myStringField")
用函数定义代码如下:
inline operator fun MyType.invoke(fieldName: String): T { val value = someFunction(fieldName) return convertToExpectedValue(value) } operator fun MyType.invoke(fieldName: String): MyType { return someFunction(fieldName) as MyType }