我有一个我想在Scala中实现的Java接口 . 接口包含以下方法声明:
public Boolean existsTable(String tableId);
我的Scala实现是:
override def existsTable(tableId: String): Boolean = {
val dbmeta = connection.getMetaData()
val dbtables = dbmeta.getTables(null, null, channelId, null)
if (dbtables.next())
// table exists
return true
else
return false
}
由于某种原因,我得到错误“覆盖方法existsTable在trait xyz类型(tableId:String)布尔值;方法existsTable具有不兼容的类型”
但我真的不知道哪里可能存在不兼容的类型,因为它只是一个返回类型的布尔值?
问候 .
PS:当我没有实现一个接口时,我确实有这个方法以前的方式工作过一次,所以方法本身应该没有错误 . 这只是Scala中Java接口的实现让我很难过 .
2 回答
正如评论中所指出的,这不起作用的原因是Scala的布尔值与Java的布尔值不同 . 解决此问题的快速方法是:
通过对类型进行别名化,您可以更清楚地了解返回的内容 . 你当然可以将它定义为:
问题是Scala的
Boolean
对应于Java的boolean
,而不是Java的Boolean
. 如果将Java返回类型更改为boolean
但将Scala保留为Boolean
则应该可以 .Scala将所有原始类型提升到真实对象的级别,让编译器决定根据它们的使用方式根据需要对它们进行打包/取消装箱 . 另一方面,Java维护两种基本类型的表示:基本类型本身(小写字母)和盒装表示(大写字母) .