我的 Scala
类需要一个 URL。我可以使用 String
类,但我想要 Java 内置的 URL 验证。那么,最好的方法是什么,可以让它接受 Java Url 类或字符串,并在字符串情况下将其转换为 Java Url?
String
到URL
的隐式转换,并且只接受URL
(这正是您想要的)。implicit def
可以在伴随类或辅助类/特质(如蛋糕模式中的特质)中定义。下面是示例代码:implicit def `string to url`(s: String) = new URL(s)
使用方法:
import the.helper.Container._
//or implement the Helper trait containing the implicit def
val url: URL = "http://google.com"
import
)。toURL
方法“添加”到String
中,如下所示:object Helpers {
implicit class String2URL(s: String) {
def toURL = new URL(s)
}
}
这个的使用示例如下:
import Helpers._
val aUrl = "http://google.com".toURL
1
,那是完全可以的)。 @m-z的答案无法重复使用,如果您需要另一个类,则必须再次创建它。它在库方面起作用,因此库用户获得了很好的文档和指南,我的只能通过“魔法”和/或小型用户帮助(例如方法import
,toURL
转换方法调用)工作。对于小的组合,我也会选择@m-z的解决方案,特别是调整Option
或Try
。但是,如果您需要超载多个参数,则认为我的解决方案更好。 这真的取决于您的用例。(如果传递的url不正确,也可以将我的代码包装在Try
中。)apply
方法:class A(id: Int, url: URL) {
def this(id: Int, url: String) = this(id, new URL(url))
}
或者
case class A(id: Int, url: URL)
object A {
def apply(id: Int, url: String): A = new A(id, new URL(url))
}
Option[A]
或Try[A]
,因为new URL
可能会失败。 - Dimitri