为什么必须在Kotlin的类中声明类型注释?

时间:2018-07-19 02:55:49

标签: kotlin

代码A运作良好,我认为代码B和代码C也会运作良好,但是我失败了,为什么?

在代码B和代码C中,我认为系统可以推断出mDBHandle的类型

代码A

class LogHandler(val mDBHandle:DBLogHandler=DBLogHandler()) {
}
class DBLogHandler() {
}

代码B

class LogHandler(val mDBHandle=DBLogHandler()) {
}
class DBLogHandler() {
}

代码C

class LogHandler(val mDBHandle:DBLogHandler()) {
}
class DBLogHandler() {
}

1 个答案:

答案 0 :(得分:3)

引用reference

  

函数参数使用Pascal表示法定义,即name:type。参数之间用逗号分隔。 每个参数都必须明确输入

这也适用于构造函数。

让我们看看您的示例:

class LogHandler(val mDBHandle:DBLogHandler=DBLogHandler())

在这里,您声明类型为DBLogHandler的只读属性和新实例的默认值(DBLogHandler())。

class LogHandler(val mDBHandle=DBLogHandler())

在此代码中,省略了参数(属性)类型声明,因此它是不正确的。

class LogHandler(val mDBHandle:DBLogHandler())

在这里,参数类型似乎已声明为DBLogHandler(),因为括号表示函数(或构造函数)的调用。因此,这不是有效的声明。

如果您想声明mDBHandle属性而不使用默认值,则可以这样操作:

class LogHandler(val mDBHandle:DBLogHandler)