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