【发布时间】:2019-03-14 09:15:53
【问题描述】:
我有一个 Java 类(我无法编辑,因为它是由 Thrift 自动生成的)定义如下:
public class TheirException extends Throwable {
public String message;
public TheirException(String message) {
this.message = message;
}
public String getMessage() {
return this.message;
}
}
但是,如果我尝试从 Kotlin 获取 message,getMessage() 不可用并产生 Unresolved reference 错误。尝试使用 messagefield 会产生以下错误:
错误:(470, 30) Kotlin:重载分辨率歧义:
公共最终变量消息:字符串!在 com.example.TheirException
中定义 public open val 消息:字符串?在 com.example.TheirException 中定义
但是,如果我这样做:
(exception as Throwable).message
解决得很好。
为什么这里需要强制转换为Throwable,为什么getMessage() 不可用,是什么导致了歧义?
【问题讨论】:
-
你可以试试getFoo()吗? kotlin 也允许使用相同的方法名进行访问。
-
你使用的是什么 kotlin 版本?在 1.3 中,
javaClass.foo指向字段,javaClass.getFoo()指向方法 -
为什么你有一个带有公共 getter 的公共字段?将字段设为私有!
-
@Deepak
getFoo()不可用“未解决的参考”。 @Lino 版本 1.3.20 @Seelenvirtuose 问题是关于如何使用从 Kotlin 生成的类,而不是关于如何更改原始类。 -
在 kotlin 1.3 中,我能够使用
.foo和.getFoo()编译和执行代码