Ich versuche herauszufinden, wie man einen Konstruktor für einen abstrakten Scala-Typ aufruft:
%Vor%Ist das überhaupt möglich? Ich bin vertraut mit Scala manifests < Ich weiß aber nicht, wie sie hier helfen könnten. Ebenso kann ich nicht herausfinden, wie man das gleiche mit dem apply () - Konstruktor eines Begleitobjekts macht:
%Vor%Irgendwelche Gedanken dankbar angenommen!
Es gibt keine direkte Möglichkeit, den Konstruktor aufzurufen oder nur bei einem Typ auf das Begleitobjekt zuzugreifen. Eine Lösung wäre, eine Typklasse zu verwenden, die eine Standardinstanz des angegebenen Typs erstellt.
%Vor% Sie müssen allen Begleitobjekten von Klassen, die die Erstellung einer Standardinstanz unterstützen, eine implizite Default
-Definition hinzufügen.
Ihre Klasse benötigt einen impliziten Konstruktorparameter, um die Manifest
zu erhalten. Dann können Sie Löschen aufrufen, um Class
zu erhalten und newInstance
aufzurufen, was reflectively den Nullary-Konstruktor aufruft, falls es einen gibt.
Ab Scala 2.10 ist die Eigenschaft erasure
im Manifest veraltet. def n = m.runtimeClass.newInstance()
macht dasselbe, aber ohne Warnungen.
Ich bin der Meinung, dass dies nicht möglich ist. Ich bin weit entfernt von einem Scala Guru, aber meine Argumentation ist dies:
Die Lösungen für dieses Problem werden in einer anderen Frage sehr gut behandelt, deshalb werde ich Sie dort für sie zeigen, anstatt hier zu wiederholen: Abstrakte Typen / Typ Parameter in Scala
Tags und Links scala