So schreiben Sie asInstanceOfOpt [T] wobei T: Beliebig

9

Es gibt eine praktische Implementierung von asInstanceOfOpt , einer sicheren Version von asInstanceOf , die in der Antwort zu Wie schreibe ich" asInstanceOfOption "in Scala . Es scheint, dass Scala 2.9.1, diese Lösung jetzt nur mit AnyRef funktioniert:

%Vor%

Kann dies neu geschrieben werden, um Any zu unterstützen?

    
Matt R 24.10.2011, 10:00
quelle

3 Antworten

1

Wenn Sie in der Scala-API suchen, nimmt die Funktion singleType einen Parameter vom Typ AnyRef. Ich kenne den Hintergrund für diese Entscheidung nicht wirklich, aber es scheint, dass Sie es umgehen müssen. Anstatt die Methode singleType zu verwenden, würde ich vorschlagen, die classType -Methode zu verwenden, die grundsätzlich für jede Klasse ein Manifest erstellen kann. Es wird etwas mehr Code benötigt, aber es könnte in etwa so aussehen:

%Vor%     
Jens Egholm 31.10.2011 20:33
quelle
0

Hier ist der Arbeitscode für 2.9.x. Es wird Verwarnungswarnungen für 2.10.x geben, aber die Verwendung von ClassTag anstelle von Manifest und runtimeClass anstelle von erasure wird sie beheben.

%Vor%

Testergebnisse:

%Vor%

Der Code ist etwas ausführlicher als hier gebraucht, hauptsächlich weil ich ihn aus einer bestehenden Codebasis von mir genommen habe, wo ich ifInstanceOfBody woanders wiederverwende. Das Einfügen in asInstanceOfOpt würde das beheben und den Code etwas verkürzen, aber das meiste ist für primitiveToBoxedMap , und vertraue mir, dass ich so etwas in der Scala-Standardbibliothek nicht finden konnte.

    
Blaisorblade 02.09.2012 19:23
quelle
0

Du könntest formlos aus Miles Sabin tippen:

Casting mit dem Typparameter eingeben

Es behandelt Primitive und Boxen:

%Vor%

Sie können die Quelle hier sehen, um zu sehen, wie sie geschrieben ist:

Ссылка

    
tksfz 04.04.2014 01:51
quelle

Tags und Links