如何覆盖Kotlin中的Java公共类方法?
我需要从Kotlin类中的Java公共类重新定义/重写方法:
// Java public class BaseOne { public static void m1() {} } // Kotlin class BaseTwo : BaseOne() { override fun m1() {} }
但得到一个错误: m1 overrides nothing
。
如果我删除override
注释,我得到Accidental override: The following declarations have the same JVM signature
。
在Java这工作正常,但不是在Kotlin 🙁
UPD:工作的Java代码
public class BaseTree extends BaseOne { public static void m1() {} }
UPD2 “Curiouser和curiouser!” (с)
我有下一个代码:
// Java class public class BaseOne { public static void m1() { System.out.println("BaseOne"); } } // Kotlin class class BaseTwo : BaseOne() { companion object { fun m1() { println("BaseTwo") } } } // Java class public class BaseThree extends BaseOne { public static void m1() { System.out.println("BaseThree"); } }
当我从Java运行这个代码时,
public class Main { public static void main(String[] args) { BaseOne.m1(); BaseThree.m1(); BaseTwo.m1(); } }
我收到:
BaseOne BaseThree BaseOne
正如你所看到的 – 覆盖/重新定义/“隐藏”不起作用
但是,如果我从Kotlin的main
运行它
fun main(args: Array) { BaseOne.m1() BaseThree.m1() BaseTwo.m1() }
全部按预期工作:
BaseOne BaseThree BaseTwo
我的另一个问题是 – 如何编写具有相同行为的代码? 有关于它的文档吗?
您正在重写一个静态方法,重写取决于有一个类的实例。
public class BaseOne { public void m1() {} }
- 为什么Kotlin收到这样的UndeclaredThrowableException而不是ParseException?
- 读取/转换一个InputStream为一个字符串
- servlets> 3.1:frontcontrolller:multipart / formData:当尺寸太大时,拒绝特定部件名称的文件
- 错误:执行任务':app:javaPreCompileDebug'失败。 > java.io.IOException:无法删除annotationProcessors.json
- 用模块初始化Jersey客户端的正确方法是什么?
- 可以在Kotlin中编写函数(即在顶层)。 我可以unit testing那些顶级?
- Java to Kotlin转换器和可空方法参数
- Java类名中的Kotlin中的静态常量
- 注入构造函数和伴随对象