我正在尝试向我的应用程序添加一些特定于类的功能,并且我希望在类层次结构中具有静态方法,其中每个类都实现自己的方法版本。我知道将它们视为替代会产生难以预测的行为,但我打算仅以类名作为前缀来调用方法。就像
'conv_ops_gpu_3.cu.cc'
像这样,Android Studio抱怨Child.mapString()意外覆盖,但是如果我添加// Java
public class Base {
public static int mapString(@NonNull String s) {
int value = Child.mapString(s);
if (value < 0) {
return defaultValue;
}
}
}
// Kotlin
class Child: Base() {
companion object {
@JvmStatic fun mapString(s: String): Int {
return when {
"a" -> 1
else -> -1
}
}
}
}
关键字,则Android Studio抱怨没有发现任何东西可以覆盖。
是否可以从Kotlin隐藏Java基类的静态方法?
答案 0 :(得分:0)
这是整个错误:
Accidental override: The following declarations have the same JVM signature (mapString(Ljava/lang/String;)I):
fun mapString(s: String): Int defined in com.example.Base
fun mapString(s: String): Int defined in com.example.Child
这可能是Kotlin如何通过Java互操作在幕后工作的问题。如果要防止错误,可以添加@JvmName批注以在JVM中使用另一个名称:
// Kotlin
class Child: Base() {
companion object {
@JvmStatic
@JvmName("childMapString")
fun mapString(s: String): Int {
return when {
"a" -> 1
else -> -1
}
}
}
}