Di Java, salah satu penggunaan yang paling umum adalah untuk mendefinisikan kelas Singleton. Namun, karena tidak ada kelas "statis" di Scala, apa saja contoh penggunaan Konstruktor Pribadi?

6
Pravesh Jain 13 Maret 2017, 17:22

2 jawaban

Jawaban Terbaik

Anda dapat mengakses konstruktor pribadi di objek pendamping kelas.

Itu memungkinkan Anda untuk membuat cara alternatif untuk membuat instance baru dari kelas Anda tanpa mengekspos konstruktor internal.

Saya datang dengan contoh yang sangat cepat tentang bagaimana seseorang dapat menggunakan ini:

class Foo private(s: String)

object Foo {
  def apply(list: Seq[String]): Foo = {
    new Foo(list.mkString(","))
  }
}

Sekarang Anda dapat membuat instance baru Foo tanpa kata kunci new dan tanpa mengekspos konstruktor internal, sehingga merangkum implementasi internal.

Ini bisa menjadi sangat penting, karena implementasi internal mungkin berubah di masa mendatang sementara API yang dihadapi publik harus tetap kompatibel ke belakang

16
Luka Jacobowitz 13 Maret 2017, 15:45

Kasus penggunaan konstruktor pribadi sebagian besar sama seperti di Java: terkadang Anda memerlukan kontrol penuh tentang bagaimana instance kelas Anda dibuat. Pertimbangkan scala.immutable.Vector. Konstruktornya agak rumit:

final class Vector[+A] private(val startIndex: Int, val endIndex: Int, focus: Int)

Konstruktor ini adalah detail implementasi kompleks yang kemungkinan akan diubah di masa mendatang dan oleh karena itu tidak boleh diekspos ke pengguna. Sebagai gantinya, Anda menyediakan metode pabrik sederhana yang menyembunyikan semua kerumitan pembuatan instance vektor: Vector.apply(), Vector.tabulate(), Vector.fill(), ...

2
ZhekaKozlov 13 Maret 2017, 14:55