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();
		}
		return 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 資料を参照してください。