Open2
(Kotlin)コンストラクタで`private val`をつけるかどうかによって生じるスコープの違い
下記の2つの書き方によって具体的に何が変わるのか説明できなかったのでメモ
パターン1:private val
あり
@Repository
class sampleRepositoryImpl(
private val environments: Environments
) : sampleRepository {
パターン2:private val
なし
@Repository
class sampleRepositoryImpl(
environments: Environments
) : sampleRepository {
結論としてはスコープの範囲が変わる。
パターン1はクラス内全体から参照可能で、パターン2はクラス内のコンストラクタ内でのみ参照可能となる
パターン1
- コンストラクタ内でvalをつけて宣言されているため、このクラスのプロパティとなる。
- したがってクラス内のどこでも呼び出すことができ、クラス内のメソッドなどで利用できる。
- なおprivateがついているのでクラスの外部からは参照できない
パターン2
- コンストラクタ内でvalやvarをつけずに宣言されており、コンストラクタ引数となる
- したがってこのクラス内のコンストラクタ内でのみ呼び出すことができ、クラス内のメソッドからは参照できない。
- クラスの外部からも参照できない。
以下3つのスコープの違いとしてあとで整理してみるとイメージしやすくなるかも
- private val xxx: XXX
- val xxx: XXX
- xxx: XXX