Sequenced Collections

24 views
Skip to first unread message

Remi Forax

unread,
Apr 29, 2023, 7:29:03 AM4/29/23
to lescastcodeurs
Bonjour à tous,
la dernière beta du JDK 21 ajoute de nouvelles interfaces, les sequenced collections, à l'API des collections
https://openjdk.org/jeps/431

Par exemple, maintenant, l'interface commune de LinkedHashSet et List est SequencedCollection et non plus Collection.

Malheureusement, sur plusieurs de mes codes, l'inférence au lieu d'inférer Collection maintenant infère SequencedCollection et si une méthode prend en paramètre une liste de ces trucs là, cela ne compile plus.

Par exemple,
var list = List.of(new LinkedHashSet<String>(), List.of("foo"));
List<Collection<String>> list2 = list;

avec le JDK 20, le type de "list" est List<Collection<String>> et avec le JDK 21 c'est List<SequencedCollection<String>>, donc la deuxième ligne ne compile plus avec le JDK 21.

Maintenant, je me demande si je suis le seul à écrire ce genre de code, auquel cas je peux le changer :) ou alors il y a plein de codes comme cela, auquel cas il faut retirer l'implantation actuelle des sequenced collections du JDK et venir avec une autre implantation.

Donc, qui veut bien utiliser la dernière version du JDK 21 sur son code et voir si cela compile ou pas ?
https://jdk.java.net/21/

Pour référence, voilà le mail que j'ai envoyé sur la mailing list officielle
https://mail.openjdk.org/pipermail/core-libs-dev/2023-April/105069.html

Rémi

alaou...@gmail.com

unread,
Apr 29, 2023, 7:54:17 AM4/29/23
to lescastcodeurs
Bonjour Rémi,

On a bloqué l’utilisation de var sur notre base de code lors du passage en java 11 (voir la discussion autour de https://groups.google.com/g/lescastcodeurs/c/_JaBHk_ET4U/m/_YAPrH-bAgAJ pour les raisons).
Donc on ne devrait pas avoir de problème.

Remi Forax

unread,
Apr 29, 2023, 9:05:03 AM4/29/23
to lescastcodeurs
From: "Réda Housni Alaoui" <alaou...@gmail.com>
To: "lescastcodeurs" <lescast...@googlegroups.com>
Sent: Saturday, April 29, 2023 1:54:17 PM
Subject: [LCC] Re: Sequenced Collections
Bonjour Rémi,
On a bloqué l’utilisation de var sur notre base de code lors du passage en java 11 (voir la discussion autour de https://groups.google.com/g/lescastcodeurs/c/_JaBHk_ET4U/m/_YAPrH-bAgAJ pour les raisons).
Donc on ne devrait pas avoir de problème.

Salut Réda,
malheureusement ne pas utiliser 'var' n'est pas suffisant, le problème est lié à l'inférence donc tu as le même problème dès le compilo infère les types.
Donc avec un varrags (List.of(...), Stream.of(...), Arrays.asList(...)), dans les streams (Stream.map(), Stream.flatMap()), avec un ?:, avec les cases d'un switch expression, etc.

Par exemple,
   List<Collection<String>> list = List.of(new ArrayDeque<String>(), List.of("foo"))
        .stream()
        .toList();

ne compile plus non plus.

Rémi


On Saturday, April 29, 2023 at 1:29:03 PM UTC+2 Remi Forax wrote:
Bonjour à tous,
la dernière beta du JDK 21 ajoute de nouvelles interfaces, les sequenced collections, à l'API des collections
https://openjdk.org/jeps/431

Par exemple, maintenant, l'interface commune de LinkedHashSet et List est SequencedCollection et non plus Collection.

Malheureusement, sur plusieurs de mes codes, l'inférence au lieu d'inférer Collection maintenant infère SequencedCollection et si une méthode prend en paramètre une liste de ces trucs là, cela ne compile plus.

Par exemple,
var list = List.of(new LinkedHashSet<String>(), List.of("foo"));
List<Collection<String>> list2 = list;

avec le JDK 20, le type de "list" est List<Collection<String>> et avec le JDK 21 c'est List<SequencedCollection<String>>, donc la deuxième ligne ne compile plus avec le JDK 21.

Maintenant, je me demande si je suis le seul à écrire ce genre de code, auquel cas je peux le changer :) ou alors il y a plein de codes comme cela, auquel cas il faut retirer l'implantation actuelle des sequenced collections du JDK et venir avec une autre implantation.

Donc, qui veut bien utiliser la dernière version du JDK 21 sur son code et voir si cela compile ou pas ?
https://jdk.java.net/21/

Pour référence, voilà le mail que j'ai envoyé sur la mailing list officielle
https://mail.openjdk.org/pipermail/core-libs-dev/2023-April/105069.html

Rémi
--
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes "lescastcodeurs".
Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le concernant, envoyez un e-mail à l'adresse lescastcodeur...@googlegroups.com.
Cette discussion peut être lue sur le Web à l'adresse https://groups.google.com/d/msgid/lescastcodeurs/1627bea3-cf96-4691-bd57-42e2377859e7n%40googlegroups.com.

Réda Housni Alaoui

unread,
Apr 29, 2023, 12:26:16 PM4/29/23
to lescastcodeurs
Je n’y avais pas pensé.
J’espère avoir le temps de tester ça sur un gros projet cette semaine 🤞

Reply all
Reply to author
Forward
0 new messages