¿Cómo puedo especificar un tipo genérico en un operador sobrecargado en Kotlin?

Estoy buscando sobrecargar el operador de split, "/", pero me gustaría permitir que se especifique un tipo genérico para guiar el tipo del valor de retorno.

Aquí hay un ejemplo:

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

Desafortunadamente, no puedo encontrar una manera de especificar explícitamente el tipo genérico T cuando no se puede inferir. Me pregunto si hay algo como lo siguiente que funcione.

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

Tenga en count que sé que

 myType.div<String>("blah") 

trabajos. Estoy buscando algo que use el operador "/".

Tendría que usar una variable intermedia, o (con Kotlin 1.2) as :

 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 

Al final, la respuesta es finalmente que no se puede hacer.

Decidí ir con overriding () para poder get el tipo genérico. También agregué una versión sin el genérico que devuelve explícitamente "MyType" para que el encadenamiento de las llamadas funcione con un tipo genérico que solo se necesita al final.

Así que ahora parece que:

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

con el código de definición de function como:

 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 }