Aufruf von ConvertToInt in Hilfskonstruktor (dies (y: string)) verursacht diesen Fehler:
%Vor%Ich weiß, dass ich ein Singleton-Objekt verwenden und alle statischen Funktionen wie convertToInt in es packen kann, aber ist es eine gute Lösung?
%Vor%mit dem Angebot von angle über die Factory-Methode anstelle des Hilfskonstruktors:
%Vor%Kundencode:
%Vor%Ich denke, in diesem Fall wäre die beste Lösung, Factory-Methoden anstelle von öffentlichen Konstruktoren zu verwenden.
Sie können also Ihren Konstruktor private
definieren und die Methode factory apply
im Companion-Objekt bereitstellen:
Weitere Informationen zu Konstruktor vs Factory-Methode finden Sie hier:
Konstruktoren gegen Fabrikmethoden
Es ist das gleiche für Scala.
Als Beispiel einer alternativen Lösung habe ich sehr generische -Lösung gemacht. Foo
class kann jetzt mit jeder Klasse arbeiten, die jemals existierte oder erstellt werden kann , vorausgesetzt, dass dieser Typ konvertiert werden kann (Sie können definieren, wie er konvertiert werden soll) nach / from Int
:
(Ich könnte toOriginal
definieren, indem ich nur = original
zurückgebe, aber es wäre zu langweilig:)
Wie Sie sehen, ist diese Lösung generisch und komplizierter. Aber soweit ich gesehen habe, benötigen viele Anwendungen eine Art von Konvertierung zwischen verschiedenen Grundwerten und / oder Klassen. Also in vielen Fällen ist es für viele Fälle lösbar (und kann ein Ereignis sein, das als sehr gut angesehen wird) und vielleicht auch für Sie. Aber es ist oft unmöglich zu sagen, was die beste Lösung für alle möglichen Fälle ist.
Ihre Lösung ist nicht so schlimm. Immerhin ist convertToInt
ähnlich einer statischen Methode in Java. Ich persönlich mag keine Hilfskonstrukteure, also würde ich normalerweise auch die Easy Angels Lösung bevorzugen. Wenn Sie jedoch beabsichtigen, später von Ihrer Klasse zu erben, wird der Ansatz des Companion-Objekts für die abgeleitete Klasse nicht "skaliert", Sie müssten diese Methode erneut implementieren. In diesem Fall sollten Sie bei Ihrer Lösung bleiben.
Theoretisch könnten Sie diese Methode in ein separates Merkmal einfügen und erweitern, aber ich würde das nicht empfehlen. Vererbung sollte auf Fälle beschränkt werden, in denen es eine echte Abhängigkeit gibt, nicht nur für "Bequemlichkeit".
Tags und Links scala