我的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