【发布时间】:2018-08-25 19:31:15
【问题描述】:
以下声明在 Kotlin 中是合法的。
fun foo(): String = "foo_1"
fun <T> foo(): T = "foo_2" as T
作为我们得到的字节码:
public final static foo()Ljava/lang/String;
// signature <T:Ljava/lang/Object;>()TT;
// declaration: T foo<T>()
public final static foo()Ljava/lang/Object;
也可以从 Kotlin 调用这两种方法。
当我试图从 Java 中调用它们时,问题就来了:
ClassKt.foo()
模棱两可的电话。两种方法都匹配...
如何避免这样的问题?如何处理这样的方法?如果 3-rd 方 kt 库有同样的问题怎么办?
上面的例子是合成的。
【问题讨论】:
-
最后一部分很简单:当第 3 方库这样做时,您可以写出缺陷并要求他们解决问题 :-).. 除此之外,可能的答案是:不要然后像这样重载你的方法。
标签: java kotlin overloading java-interop