W języku Java 8 w konstruktorze java.net.DatagramPacket, który akceptuje argument java.net.SocketAddress, usunięto deklarację wskazującą możliwość zgłoszenia wyjątku SocketException.
W wersjach wcześniejszych niż Java 8 konstruktory java.net.DatagramPacket deklarowały możliwość zgłaszania wyjątku java.net.SocketException, ale wyjątek ten nie był przez nie nigdy zgłaszany.
Ta reguła powoduje oznaczenie konstruktorów DatagramPacket uwzględniających argument SocketAddress, które są otoczone przez blok try wychwytujący wyjątek SocketException lub jego nadklasę java.io.IOException, jak pokazano w poniższym przykładzie:
public DatagramPacket getDatagramPacket (SocketAddress socketAddress, byte [] bytes) { DatagramPacket dp = null; spróbuj {
dp = new DatagramPacket (bytes, bytes.length, socketAddress); } catch (SocketException e) {
e.printStackTrace();
}
zwrot dp; }
Ma to wpływ na następujące konstruktory DatagramPacket:
public DatagramPacket(byte[] buf,
int offset,
int length,
SocketAddress address)
public DatagramPacket(byte[] buf,
int length,
SocketAddress address)
Jeśli żaden inny kod w bloku try nie zgłasza wyjątku SocketException, podczas kompilowania kodu Java 8 zostanie wygenerowany komunikat o błędzie informujący, że wyjątek jest nieosiągalny.
Należy usunąć blok catch, aby ten błąd nie wystąpił.
Więcej informacji na temat klasy java.net.DatagramPacket można znaleźć w dokumentacji języka Java:
Klasa java.net.DatagramPacket.