Scala var类型使用会导致类型不匹配

时间:2015-10-11 20:31:23

标签: scala

我认为Scala var类型很酷,有助于避免大量的技术代码,并且可以专注于功能。但是,我现在面对一些非常奇怪的事情。编译程序时,我收到来自sbt的错误消息:

type mismatch;
found: java.sql.Connection
required: String

this.conn = DriverManager.getConnection(
                                       ^

请注意,编译器指向类的conn属性,并且此属性在类中定义如下:

class Db{
   private var conn = ""

   ....
}

那么,为什么编译器关心类型匹配,如果它是Scala并且我使用var数据类型?

2 个答案:

答案 0 :(得分:5)

var不是数据类型。它是用于声明和定义可变变量的关键字。类型不是动态的 - 它仍然是在编译时推断出来的。在这种情况下,conn被推断为String,它与写作完全相同

private var conn: String = ""

Scala的类型系统的重点是禁止传递不兼容的类型。它失败了,因为很明显,您无法将SQL连接分配给String类型的变量。类型推断不允许您忽略对象的类型,它只是让编译器尽可能地计算出来。

答案 1 :(得分:2)

var不是数据类型,它是用于在Scala中定义变量的一个关键字。另一个是val。您使用var还是val只会影响您定义的变量是重新分配给(var)还是只读(val)。它无论如何都不会影响变量的类型。

无论您使用var还是val,都要明确指定变量的类型(通过在变量名后面写: theType)或从您指定的值隐式推断变量的类型它来。

在您的示例中,您未明确提供类型,因此推断类型为String,因为它是conn的类型。