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

Jac*_*ian 0 scala

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

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

this.conn = DriverManager.getConnection(
                                       ^
Run Code Online (Sandbox Code Playgroud)

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

class Db{
   private var conn = ""

   ....
}
Run Code Online (Sandbox Code Playgroud)

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

Sim*_*ead 5

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

private var conn: String = ""
Run Code Online (Sandbox Code Playgroud)

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