Tag: 运算符重载

如何在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:UnsupportedOperationException用于get / set操作符

我试图将我的库中read和write的函数分别转换为运算符函数get和set 。 我的函数使用一个泛化的泛型类型,它们也是内联的方法。 (你可以在这里看到我的图书馆。) 编译器没有让我通过的问题,我不明白为什么使用非运算符函数推理工作得很好,但使用运算符在运行时失败。 Exception in thread "main" java.lang.UnsupportedOperationException: This function has a reified type parameter and thus can only be inlined at compilation time, not called directly. at kotlin.jvm.internal.Intrinsics.throwUndefinedForReified(Intrinsics.java:173) at kotlin.jvm.internal.Intrinsics.throwUndefinedForReified(Intrinsics.java:167) at kotlin.jvm.internal.Intrinsics.reifyJavaClass(Intrinsics.java:201) 代码如下: operator inline fun <reified T> get(address: Long): T { … } operator inline fun <reified T> get(address: Int): T […]

平等在Kotlin

我正在学习Kotlin,拥有C ++和Java背景。 我期待以下打印true ,而不是false 。 我知道==映射到equals 。 equals的默认实现是否不比较每个成员,即firstName和lastName ? 如果是这样,它不会看到字符串值相等(因为==地图再次equal )? 显然有一些与平等与身份相关的东西,我还没有在科特林的权利。 class MyPerson(val firstName: String, val lastName: String) fun main(args: Array<String>) { println(MyPerson("Charlie", "Parker") == MyPerson("Charlie", "Parker")) }