java.net.URLのgetメソッドで取得できるURLの部分でお気づきのとおり、getメソッドの中には存在しない場合の戻り値がnullだったり-1だったりするものがある。Scalaで使うなら「存在しない場合」はNone
で受け取りたい。そこで、java.net.URL
用のラッパーを作った。
implicit class ScalaURL(url: java.net.URL) {
def query: Option[String] = url.getQuery match {
case null => None
case q: String => Some(q)
}
def path: Option[String] = url.getPath match {
case "" => None
case p: String => Some(p)
}
def userInfo: Option[String] = url.getUserInfo match {
case null => None
case u: String => Some(u)
}
def authority: String = url.getAuthority
def port: Option[Int] = url.getPort match {
case -1 => None
case p: Int => Some(p)
}
def defaultPort: Option[Int] = url.getDefaultPort match {
case -1 => None
case p: Int => Some(p)
}
def protocol: String = url.getProtocol
def host: String = url.getHost
def file: Option[String] = url.getFile match {
case "" => None
case f: String => Some(f)
}
def ref: Option[String] = url.getRef match {
case null => None
case r: String => Some(r)
}
}