如何在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 }