J'ai un besoin d'ouvrir N sockets multicast (où N vient de la taille d'une liste d'arguments). Je vais ensuite envoyer les mêmes données à chacun des N sockets dans une boucle, et enfin, fermer chaque socket. Ma question est la suivante : comment puis-je faire cela en utilisant le bloc try-with-resources ? Voici comment je pourrais faire cela avec une seule ressource :
final int port = ...;
try (final MulticastSocket socket = new MulticastSocket(port)) {
// Do a bunch of sends of small packet data over a long period of time
...
}
Le seul moyen auquel je pense pour faire cela avec plusieurs ports est le suivant :
final List<Integer> ports = ...;
final List<MulticastSocket> sockets = new ArrayList<>(ports.size());
try {
for (final Integer port : ports) {
sockets.add(new MulticastSocket(port));
}
// Do a bunch of sends of small packet data over a long period of time
...
} finally {
for (final MulticastSocket socket : sockets) {
try {
socket.close();
} catch (final Throwable t) {
// Eat the exception
}
}
}
Existe-t-il un moyen plus concis d'y parvenir, ou la solution que je propose est-elle la meilleure possible ?