考虑以下片段。
class Foo() {
val x = Bar.getValue()
init {
// check the validity of x and abort if invalid
}
val y = Cow.getValue(x) // requires x to be valid
init {
// continue with initialization
}
}
Run Code Online (Sandbox Code Playgroud)
由于主构造函数不能有任何代码,没有多个 init 块就不可能出现上述情况。换句话说,拥有多个 init 块的能力有助于解决初始化期间涉及属性的依赖关系;当属性为只读时更是如此。
一种用例是modularize
class
initialization
.
如果一个类具有多个依赖项,并且每个依赖项的初始化都非常重要,那么init
为每个依赖项初始化使用单独的块是有意义的,以便您的代码保持可管理性。您可以有一个初始化块,但代码将很难遵循和管理。
我认为单一责任原则适用于此。
例如,假设我们有一个具有多个依赖项的类,如果您使用多个 init 块,您的代码将是
// Initialization code for dependency 1
init{
// complex calculations for dependency 1 initialization
}
// Initialization code for dependency 2
init{
// complex calculations for dependency 2 initialization
}
// Initialization code for dependency n
init{
// complex calculations for nth dependency initialization
}
Run Code Online (Sandbox Code Playgroud)
这里你的初始化看起来很清楚,你可以看到哪个 init 块做了什么。
但是,如果您使用单个 init 块,您的代码将是
// Initialization code for all dependencies
init{
// complex calculations for 1st dependency initialization
// complex calculations for 2nd dependency initialization
// complex calculations for nth dependency initialization
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
734 次 |
最近记录: |