我需要打开N个多播套接字(其中N来自参数列表的大小)。然后,我会将相同的数据发送到循环中的N个套接字中的每个套接字,最后关闭每个套接字。我的问题是,我如何使用try-with-resources块来做到这一点?下面是我如何与一个单一的资源做到这一点:Java试用资源未知资源计数
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
...
}
我能想到的唯一的办法具有多个端口要做到这一点是:
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
}
}
}
有没有更简洁的方式为了实现这一点,还是我提出的解决方案一样好?
什么是'port'在lambda表达式? – saka1029
@ saka1029啊,那里,修好了。但那不是重点。关键是构造。细节留给学生练习。 –