SocketAddress を持つ DatagramPacket コンストラクターが SocketException を宣言しなくなった

Java 8 では、SocketException をスローできるという宣言が、java.net.SocketAddress 引数を受け入れる java.net.DatagramPacket コンストラクターから削除されました。 Java 8 より前では、java.net.DatagramPacket コンストラクターは、java.net.SocketException をスローできると宣言しましたが、これらのコンストラクターによって例外がスローされることはありませんでした。

この規則により、以下の例に示すとおり、SocketException またはそのスーパークラス java.io.IOException をキャッチする try ブロックによって囲まれている、SocketAddress 引数が含まれている DatagramPacket コンストラクターにフラグを立てます。

	public DatagramPacket getDatagramPacket (SocketAddress socketAddress, byte [] bytes) { DatagramPacket dp = null; try {
			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 資料を参照してください。