Как указать общий тип на перегруженном операторе в Котлин?

Я ищу, чтобы перегрузить оператор деления «/», но хотел бы указать, чтобы общий тип указывался для указания типа возвращаемого значения.

Вот пример:

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) 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 

В конце концов, ответ, в конечном счете, не может быть выполнен.

Я решил пойти с переопределением (), чтобы получить общий тип. Я также добавил версию без общего типа, которая явно возвращает «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 }