如何在Kotlin的重载操作符上指定泛型?

我正在寻找超载除法运算符“/”,但希望允许指定泛型类型来指导返回值的类型。

这是一个例子:

inline operator fun <reified T> MyType.div(fieldName: String): T { val value = someFunction(fieldName) return convertToExpectedValue(value) } 

不幸的是,我无法想出一个方法来明确指定泛型类型T,当它不能被推断。 我想知道是否有像以下这样的工作?

 val stringVal = myType /<MyType> "myField" /<String> "myStringField" 

请注意,我知道这一点

 myType.div<String>("blah") 

作品。 我正在寻找使用运算符“/”的东西。

你将不得不使用一个中间变量,或者(和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 

最后,答案最终是不能做到的。

我决定去覆盖(),所以我可以得到泛型类型。 我还添加了一个没有明确返回“MyType”泛型的版本,以便链接调用可以使用只在最后需要的泛型类型。

所以现在看起来像:

 val stringVal = myType("fieldName")<String>("myStringField") 

用函数定义代码如下:

 inline operator fun <reified T> MyType.invoke(fieldName: String): T { val value = someFunction(fieldName) return convertToExpectedValue(value) } operator fun MyType.invoke(fieldName: String): MyType { return someFunction(fieldName) as MyType }