我有一个Java类(我不能编辑,因为它是由Thrift自动生成的)定义如下:
public class TheirException extends Throwable {
public String message;
public TheirException(String message) {
this.message = message;
}
public String getMessage() {
return this.message;
}
}
但是,如果我尝试从静态编程语言获取消息
,则getMessage()
不可用,并会产生未解决的引用错误。尝试使用消息
字段会产生以下错误:
错误:(470,30)静态编程语言:重载解决歧义:
公共最终var消息:字符串!定义在com.example.TheirExctive
公共打开val消息:字符串?定义在com.example.TheirExctive
然而,如果我这样做:
(exception as Throwable).message
很好。
为什么这里有必要强制转换为可丢弃的,为什么不能使用getMessage(),是什么导致了这种歧义?
这种歧义是由于消息
是公开的。即使没有支持字段,Kotlin也会将每个getter转换为属性。如果将另一个函数添加到此类:
public String getSecondMessage() {
return "second message"; // Note that this getter does not rely on a field
}
您可以在Kotlin中这样访问它:
TheirException("message").secondMessage
如果message
是公共的,并且有一个getMessage()
函数,那么Kotlin会创建两个getter,并且在调用站点上,您知道该使用哪个。在您的示例中,两个getter具有相同的行为,但情况并非总是如此。
当您将类强制转换为一个Throwable
时,您显式地告诉编译器该类具有Throwable
的签名,这意味着您定义了只有一个消息
getter,这就解决了歧义。请注意,Kotlin对可丢弃的有自己的定义(这一点稍后会很重要)。
现在你可能会问为什么没有
getMessage()
函数。这是因为您正在向Throwable
而不是java施压。lang.Throwable
。Throwable
的Kotlin定义没有getMessage()
我正在尝试从Java切换到Kotlin。但我有很多遗留代码和第三方库。我看到,Java类中经常存在没有getter和setter的公共字段,这些字段必须从其他类访问。如果没有Kotlin代码中的getter,我如何访问Java类的公共字段?
我有一个关于静态方法访问的问题。我有一个类,其中有4个静态方法。如代码所示: } 我正在从下面的代码调用来自onLoadShipperDetailsListCtrl()的setSortingEnable()方法: } 因此,如果我从其他类调用setSortingEnabled()方法,我会认为它是公共的,而其他方法是私有的,但它会给我一个错误:Java . lang . nosuchmethode
到目前为止,我一直在使用这个静态编程语言密封类: 这在我的Kotlin和Java代码中都非常有效。今天我尝试将这个类改为使用对象(建议减少额外的类实例化): 我可以在我的其他静态编程语言文件中引用这个简单的版本,但是我现在正在努力在我的Java文件中使用它。 当我尝试在Java中引用时,我尝试了以下两种回弹编译错误: 有人知道我现在如何在Java中引用该实例吗?
如何调用从公共静态空白到非静态的公共空白碎片类?或者有另一种方法在(listViewHolder.dot.setOnClickListener(new View.OnClickListener()和公共无效搜索3())
问题内容: 和之间有什么区别? 例如 : 要么 问题答案: 尽管您 确实 希望遵守约定,但在功能上没有什么区别(字节码将 完全相同 ),请访问JLS-8.3.1。场修饰符: __ 这将是奇怪的,看.. 我也建议您访问checkstyle。 编辑: 从同一页面链接到该部分: http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls
我是Kotlin开发的新手,我不知道如何处理这个问题。我将以下Kotlin数据类映射到MongoDB集合(Spring data MongoDB): 我想覆盖默认的 id 获取器并返回一个字符串而不是对象 Id。似乎“id”字段名称无法更改,因为我收到消息“不允许自定义id属性的字段名称!自定义名称不会被考虑!“,因此我无法使用始终建议的_id解决方案。 如何才能做到这一点?我错过了什么吗?