In Scala v 2.7.7
Ich habe eine Datei mit
%Vor%Dies wirft den Fehler:
class Etwas nimmt Typparameter
Objekt Etwas erweitert OtherConstructor [Etwas] {
Allerdings kann ich das nicht tun
%Vor% Es löst einen Fehler aus:
Fehler: ';' erwartet aber '[' gefunden.
Ist es möglich, Typparameter an ein Objekt zu senden? Oder sollte ich ändern und einfach Otherconstructor
verwendenSie könnten verwenden:
%Vor% Sie werden natürlich dadurch eingeschränkt, dass Sie einen existentiellen Typ ohne Obergrenze anstelle eines konkreten Typs haben. Diese Lösung ist möglicherweise nicht sinnvoll, und Sie benötigen möglicherweise ein Objekt pro Betontyp T
für die T, die Ihnen wichtig sind, z. B.
Aber dann hat dies den (möglichen) Nachteil, dass StringSomething
nicht das Begleitobjekt von Something
ist.
Allerdings wäre mein Rat fange nicht an, generische APIs zu entwerfen (besonders selbstreferentielle wie oben), wenn du nicht wirklich weißt, was du weißt sind dabei. Es wird fast mit Tränen enden und es gibt viele CORE-Java-APIs, die schrecklich sind, weil Generika hinzugefügt wurden (das RowSorter
API auf JTable
ist ein Beispiel)
Ein Objekt muss einen konkreten Typ haben. Das Scala-Objekt Construct ist keine Ausnahme von dieser Regel.
Eine gültige Definition ist
%Vor% Dabei ist T
ein konkreter Typ .
Danke für die Antworten auf
%Vor%scheint kompiliert zu werden (obwohl ich das noch nicht getestet habe: -))
@oxbow_lakes, ich bin Ihrem Rat gefolgt - das Typsystem zu vermeiden - bis jetzt, aber ich muss es tun !!! Ich habe existentielle Typen, Typ-Löschung und all das studiert, aber es ist immer noch nicht in meiner Reichweite: (
Sie können das allgemeine Problem, object Foo[T]
zu benötigen, lösen, indem Sie den type-Parameter auf die Methoden in object Foo
:
Wenn Sie wirklich ein Objekt pro T benötigen, können Sie eine Klasse erstellen und den typenfreien Companer von apply zurückgeben lassen.
%Vor%Beachten Sie, dass dies den Foo [T] Companion bei jedem Aufruf neu baut, damit Sie ihn hell und statuslos behalten möchten.
Eine explizite Lösung des obigen Problems:
%Vor%Tags und Links scala object type-parameter