我希望重写除法运算符" /",但是希望允许指定泛型类型来指导返回值的类型。
以下是一个例子:
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")
的工作原理。我正在寻找使用运营商&#34; /&#34;。
的东西答案 0 :(得分:3)
您必须使用中间变量,或(使用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
答案 1 :(得分:0)
最后,答案最终是无法完成的。
我决定使用overriding(),这样我就可以获得泛型类型了。我还添加了一个没有显式返回&#34; MyType&#34;因此,链接调用将使用最终只需要的泛型类型。
所以现在看起来像:
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
}