具有 SocketAddress 的 DatagramPacket 构造函数不再声明 SocketException

在 Java 8 中,接受 java.net.SocketAddress 自变量的 java.net.DatagramPacket 构造函数移除了可抛出 SocketException 的声明。 在 Java 8 之前,java.net.DatagramPacket 构造函数声明了可抛出 java.net.SocketException,但这些构造函数从未抛出过该异常。

如果 DatagramPacket 构造函数包含 SocketAddress 自变量,并且这些构造函数的两边存在用于捕获 SocketException 或其超类 java.io.IOException 的 try 块,那么此规则会标记这些构造函数,如以下示例中所示:

	public DatagramPacket getDatagramPacket (SocketAddress socketAddress, byte [] bytes) { DatagramPacket dp = null; 请尝试 {
			dp = new DatagramPacket (bytes , bytes.length , socketAddress);} catch (SocketException e) {
			e.printStackTrace();
		}
		返回 dp;}

以下 DatagramPacket 构造函数受到影响:

public DatagramPacket(byte[] buf,
                      int offset,
                      int length,
                      SocketAddress address)

public DatagramPacket(byte[] buf,
                      int length,
                      SocketAddress address)

如果 try 块内没有其他代码抛出 SocketException,那么当您通过 Java 8 进行编译时,将有错误表明该异常不可达。 请移除 catch 块,这样此错误就不会出现。

有关 java.net.DatagramPacket 类的更多信息,请参阅 Class java.net.DatagramPacket Java 文档。