以下声明在 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 库有同样的问题怎么办?
上面的例子是一个合成的例子。