在 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 文档。