マイペースなプログラミング日記

DTMやプログラミングにお熱なd-kamiがマイペースに書くブログ

JavaのURLクラスのコンストラクタがJava 20から非推奨になっていたので

Java 20で地味にURLクラスのコンストラクタが非推奨になっていた。ずっとDTMしていた関係でJavaの話題を追えていなかった。ようは今までは

var url = new URL("https://d-kami.hatenablog.com/feed");

みたいに書いていたのを

var url = new URI("https://d-kami.hatenablog.com/feed").toURL();

と書き直せば非推奨な部分を回避できる。地味にthrowされる例外が違っていてURLのコンストラクタだとjava.net.MalformedURLExceptionが投げられていたが、URIのコンストラクタだとjava.net.URISyntaxExceptionが投げられる。MalformedURLExceptionはIOExceptionを継承しているが、URISyntaxExceptionはExceptionを直接継承していてIOExceptionを経由していないという違いがある。どっちにしろtoURL時にMalformedURLExceptionが投げられるので…

ただし!

URIにはstaticなcreateというメソッドがあり

var url = URI.create("https://d-kami.hatenablog.com/feed").toURL();

と書くことも可能で、この場合はURISyntaxExceptionではなくjava.lang.IllegalArgumentExceptionがthrowされる。IllegalArgumentExceptionはRuntimeExceptionを継承しているのでこっちの方が使い方が若干緩くなる。Javaのソースコード読んでないから何とも言えないけどcreateの中でコンストラクタ呼び出してURISyntaxExceptionがでたらIllegalArgumentExceptionを代わりに投げてるだけかも?そんな気がしているだけです