Tutoriel par Examples: covariance



string[] strings = new[] {"foo", "bar"}; object[] objects = strings; // implicit conversion from string[] to object[] Cette conversion n'est pas sécurisée. Le code suivant déclenchera une exception d'exécution: string[] strings = new[] {"Foo"}; object[] obje...
Le symbole + marque un paramètre de type comme covariant - nous disons ici que "le Producer est covariant sur A ": trait Producer[+A] { def produce: A } Un paramètre de type covariant peut être considéré comme un type de "sortie". Marquer A comme covariant affirme que Prod...
Comme les collections sont généralement covariantes dans leur type d'élément *, une collection d'un sous-type peut être transmise lorsqu'un super type est attendu: trait Animal { def name: String } case class Dog(name: String) extends Animal object Animal { def printAnimalNames(...
Les tableaux d'objets sont covariants, ce qui signifie que, tout comme Integer est une sous-classe de Number , Integer[] est une sous-classe de Number[] . Cela peut sembler intuitif, mais peut entraîner un comportement surprenant: Integer[] integerArray = {1, 2, 3}; Number[] numberArray = inte...
Il y a aussi un moyen d'avoir une seule méthode pour accepter un argument covariant, au lieu d'avoir le trait entier covariant. Cela peut être nécessaire car vous souhaitez utiliser T dans une position contravariante, tout en restant covariant. trait LocalVariance[T]{ /// ??? throws a No...
Quand un IEnumerable<T> un sous-type d'un autre IEnumerable<T1> ? Lorsque T est un sous-type de T1 . IEnumerable est covariant dans son paramètre T , ce qui signifie que la relation de sous-type d' IEnumerable va dans le même sens que celle de T class Animal { /* ... */ } class...

Page 1 de 1