erstellen Sie eine neue Instanz eines Typs in scala

Wenn ich eine C-Klasse-definiert als

class C[A]

gibt es eine Möglichkeit zum erstellen einer neuen Instanz von A in C? So etwas wie

class C[A] {
  def f(): A = new A()
}

Ich verstehe, dass, wenn dieses möglich wäre, würde Sie wahrscheinlich angeben, die als argument für den Konstruktor irgendwo, und das ist in Ordnung.

Wenn es nicht möglich ist, gibt es Entwurfsmuster für den Umgang mit der Art von situation, wo Sie möchten, erstellen Sie eine neue Instanz eines Typs?

  • Und was schlagen Sie vor, passiert, wenn der konkrete Typ nicht über einen (parameterlosen) construcutor?
  • Im Idealfall könnten Sie diese in den Typ-parameter. So könnte ich definieren C wie class C[A(String, String)] oder so etwas. Dann würd ich anrufen Einer mit zwei String-Argumente.
  • Gilt, dass Scala?
  • Nein, aber class C[(String, String), A] wäre. Es ist ziemlich einfach zu erweitern mein Ansatz unten, um einige (oder alle) der Konstruktor-Argumente in der make Methode durch die Verwendung von einem zweiten Typ-parameter.
  • Aber trotzdem, eine definition von C würde nur Arbeit für einen bestimmten Konstruktor Signatur. Das war mein Punkt.
  • Nicht so. class C[Args, T](implicit e: Makeable[Args, T]) { ... }. Jeder Makeable Instanz würde nur destructure Args geben, wie nötig, um den richtigen Konstruktor aufzurufen.
  • Ja, dein "hack" funktioniert. Ich war in Bezug auf die ursprüngliche Frage. Das ist, warum ich kommentierte hier und nicht auf Ihre Antwort.

Schreibe einen Kommentar