Wie kann ich eine Methode im Hilfskonstruktor aufrufen?

8
%Vor%

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%     
Mohammad Reza Esmaeilzadeh 16.02.2011, 08:39
quelle

3 Antworten

2

mit dem Angebot von angle über die Factory-Methode anstelle des Hilfskonstruktors:

%Vor%

Kundencode:

%Vor%     
Mohammad Reza Esmaeilzadeh 17.02.2011, 07:03
quelle
14

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:

%Vor%

Weitere Informationen zu Konstruktor vs Factory-Methode finden Sie hier:

Konstruktoren gegen Fabrikmethoden

Es ist das gleiche für Scala.

Aktualisieren

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 :

%Vor%

(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.

    
tenshi 16.02.2011 09:06
quelle
0

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".

    
Landei 16.02.2011 12:14
quelle

Tags und Links