Scala übergibt Parameter an Objekt

8

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

verwenden     
Shahzad Mian 07.04.2010, 14:58
quelle

4 Antworten

4

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

%Vor%

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)

    
oxbow_lakes 07.04.2010 15:16
quelle
3

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 .

    
Thomas Jung 07.04.2010 15:06
quelle
1

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

    
SiM 08.04.2010 22:33
quelle
1

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 :

setzen %Vor%

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%     
Scott Smith 04.11.2017 23:47
quelle

Tags und Links