Ich muss N Multicast-Sockets öffnen (wobei N aus der Größe einer Argumentliste stammt). Ich werde dann die gleichen Daten an jede der N Buchsen innerhalb einer Schleife senden, und schließe schließlich jeden Sockel. Meine Frage ist, wie mache ich das mit dem Try-with-Resources-Block? Hier finden Sie, wie ich dies zu tun, mit einer einzigen Ressource:Java Try-With-Resources Unbekannte Ressource Count
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
...
}
Der einzige Weg, ich denke, kann dies mit mehreren Ports zu tun, ist die folgende:
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
}
}
}
Gibt es eine prägnante Art und Weise um dies zu erreichen, oder ist meine vorgeschlagene Lösung so gut wie es geht?
Was 'port' in dem Lambda-Ausdruck ist? – saka1029
@ saka1029 argh, dort, reparierte es. Aber darum geht es nicht. Der Punkt ist das Konstrukt. Die Details werden dem Schüler als Übung überlassen. –