首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我可以用Kotlin伴生对象方法隐藏Java静态方法吗?

我可以用Kotlin伴生对象方法隐藏Java静态方法吗?
EN

Stack Overflow用户
提问于 2018-07-26 03:41:12
回答 1查看 333关注 0票数 0

我正在尝试向我的应用程序添加一些特定于类的功能,并且我希望在类层次结构上有静态方法,其中每个类实现其自己版本的方法。我知道将这些视为重写将产生难以预测的行为,但我打算只调用以类名为前缀的方法。太像了

代码语言:javascript
复制
// 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抱怨Child.mapString()意外重写,但是如果我添加override关键字,那么Android Studio会抱怨没有找到重写的东西。

我可以对Kotlin隐藏Java基类的静态方法吗?

EN

回答 1

Stack Overflow用户

发布于 2018-07-26 05:26:15

这是一个完整的错误:

代码语言:javascript
复制
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互操作的问题。如果您想防止该错误,可以在JVM中添加@JvmName注释以具有另一个名称:

代码语言:javascript
复制
// Kotlin
class Child: Base() {
  companion object {
    @JvmStatic 
    @JvmName("childMapString")
    fun mapString(s: String): Int {
      return when {
        "a" -> 1
        else -> -1
      }
    }
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51526525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档