57 votes

Pourquoi les tableaux sont-ils invariants, mais les listes sont-ils covariants?

Par exemple, pourquoi

 val list:List[Any] = List[Int](1,2,3)
 

travailler, mais

 val arr:Array[Any] = Array[Int](1,2,3)
 

échoue (car les tableaux sont invariants). Quel est l'effet souhaité derrière cette décision de conception?

80voto

Op De Cirkel Points 8632

Sinon, cela briserait la sécurité de type. Sinon, vous pourriez faire quelque chose comme ceci:

 val arr:Array[Int] = Array[Int](1,2,3)
val arr2:Array[Any] = arr
arr2(0) = 2.54
 

et le compilateur ne peut pas l'attraper.

En revanche, les listes sont immuables, vous ne pouvez donc pas ajouter quelque chose qui n'est pas Int

25voto

sshannin Points 1644

En effet, les listes sont immuables et les tableaux sont modifiables.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X