String または InetAddress vararg パラメータのいずれかを取ることができるオーバーロードされた Java メソッド呼び出しがあります。複雑さを軽減するために、Java メソッドを呼び出す前に、文字列のシーケンスを InetAddresses のシーケンスに変換したいと考えました。String を InetAddress に変換する際に、有効な値のみを許可したい
typetagでこれを見て、Tryでこれを見て、次のように思いつきました。
import scala.reflect.runtime.universe._
import java.net.InetAddress
import scala.util.Try
type InetAddr = java.net.InetAddress
def tryMap[A](xs: Seq[Try[A]]) =
Try(Some(xs.map(_.get))).
getOrElse(None)
def toInet(address: String): Try[InetAddr] = {
Try(InetAddress.getByName(address))
}
def stringToInet[A: TypeTag](xs: Seq[A]): Option[Seq[InetAddr]] = typeOf[A] match {
case t if t =:= typeOf[String] => tryMap(xs.map(toInet)).getOrElse(None)
case t if t =:= typeOf[InetAddr] => Some(xs)
case _ => None
}
しかし、私はエラーが発生します
<console>:18: error: type mismatch;
found : String => scala.util.Try[InetAddr]
required: A => ?
case t if t =:= typeOf[String] => tryMap(xs.map(toInet)).getOrElse(None)
実行可能なものに近づいているのか、軌道から大きく外れているのかはわかりません。解決策を見つけるためのガイダンスをいただければ幸いです。