2017-07-22 2 views
0

Aufruf habe ich eine Klasseeine Covariant Methode in Scala

class Getable [+T] (val data: T) 

Und ich eine Methode für die Klasse erstellen die Nummer funktioniert es drucken

def printNumber (in: Getable[Number]) = { println("It's " + in.data)} 

Also für

get(new Getable(10.0)) 

Aber funktioniert nicht für

val g = new Getable(10.0) 
get(g) 

Ich erhalte diese Fehlermeldung

scala> get(g) 
<console>:16: error: type mismatch; 
found : Getable[Double] 
required: Getable[Number] 
    get(g) 
    ^

Aber die Überwindung der Fehlermeldung ist der Grund, warum wir Kovarianz verwenden.

+6

In Scala 'Number' ist kein übergeordneter Typ von' scala.Double'. –

Antwort

0

Sie müssen einen Compiler mit dem Typ Getable anweisen.

val g: Getable[Number] = new Getable(10.0)

oder

val g = new Getable[Number](10.0)

+0

OP fragt speziell nach Kontravarianz. Ihr Ansatz würde auch mit einer invarianten Deklaration arbeiten und somit die Varianz nicht nutzen. – lutzh