代码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() {
}
答案 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)