我的Scala
类需要一个URL。我可以使用String
类,但我希望Java内置URL验证。允许它使用Java Url类或String的最佳方法是什么,如果是String,则将其转换为Java Url?斯卡拉 - 字符串到网址
3
A
回答
5
你可以使用一个重载的构造函数或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))
}
4
您可以从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
比较@ MZ的答案:你可以用这种方法组合多个参数,而不用组合不同参数的爆炸,而对于那个答案它将是指数的(虽然对于小指数,例如在这种情况下1
,这非常好)。 @ m-z的答案是不可重用的,如果你需要另一个类,你必须重新创建它。它在库的一边工作,所以lib用户得到一个很好的文档,指导如何使用它,我的只是与“魔术”和/或小型用户帮助(如import
的方法,toURL
转换方法调用)一起工作。我也会选择@ m-z的小组合解决方案,特别是在调整Option
或Try
时。但是如果您需要重载多个参数,我认为我的解决方案效果更好。这真的取决于你的用例。 (你也可以用Try
来包装我,如果有可能是传递的url无效的情况)
相关问题
- 1. 斯卡拉:字符串Chomp
- 2. 斯卡拉:从字符串
- 3. 斯卡拉ByteArrayInputStream字符串
- 4. 斯卡拉从字符串
- 5. 斯卡拉字符串 - json
- 6. 字符串到斯卡拉Int中
- 7. 斯卡拉:列表[Tuple3]到地图[字符串,字符串]
- 8. 斯卡拉/火花映射[字符串,列表[字符串]]到字符串对
- 9. 斯卡拉长字符串错误
- 10. 斯卡拉解析/分割字符串
- 11. 字符串范围斯卡拉
- 12. 斯卡拉字符串比较
- 13. 斯卡拉字符串插值?
- 14. 转换JSON字符串在斯卡拉
- 15. 斯卡拉字符串格式化
- 16. 斯卡拉通过字符串名称
- 17. 斯卡拉分割字符串元组
- 18. 周边斯卡拉字符串
- 19. 以字节字符串的子串在阿卡/斯卡拉
- 20. 斯卡拉 - 查询字符串解析器和生成器的网址DSL
- 21. 斯卡拉大众网址下载
- 22. 字符串选项[字符串]的斯卡拉名单与mkString
- 23. 转换斯卡拉字符串RDD [SEQ [字符串]
- 24. 斯卡拉使用字符串插值字符串替换
- 25. found String,必需(字符串,字符串,字符串,诠释):元组斯卡拉
- 26. 斯卡拉集合:util.Map [字符串,AnyRef] - 地图[字符串,字符串]
- 27. 在斯卡拉转换字符串到字符串转换有多昂贵?
- 28. 替换斯卡拉字符串中的字符
- 29. 斯卡拉字符串到Java的Util日期转换
- 30. 斯卡拉十六进制字符串到整数转换
恕我直言,最好有一个'Option [A]'或者'Try [A]'作为apply方法,因为'新的URL“可能会失败。 – Dimitri