Для моего класса Scala
требуется URL. Я мог бы использовать класс String
, но мне хотелось бы, чтобы встроенная проверка URL-адресов Java. Каков наилучший способ позволить ему взять либо Java Url class, либо String, и, если String, превратить его в Java Url?Scala - String to Url
ответ
Вы можете использовать перегруженный конструктор или 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))
}
Вы можете создать неявное преобразование из 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 не может быть повторно использован, если вам нужен другой класс, вам нужно его снова создать. Он работает на стороне библиотеки, поэтому пользователи lib получают хорошую документацию, руководство по ее использованию, мои будут работать только с магии и/или небольшой помощью пользователя (например, import
метода, toURL
метод преобразования вызова). Я бы выбрал решение @ m-z для небольших комбинаций, особенно с настройкой Option
или Try
. Но если вам нужно перегрузить несколько параметров, я думаю, что мое решение работает лучше. Это действительно зависит от вашего варианта использования. (Вы можете обернуть мой с помощью Try
, если могут быть случаи, когда переданный URL недействителен.)
- 1. Scala ByteArrayInputStream to String
- 2. String to Int в Scala
- 3. Scala transform String to StringOps
- 4. scala/spark mapping [String, List [String]] to String пары
- 5. convert scala map string -> string to string -> map
- 6. String Url image to bitmap
- 7. Scala convert Опция [T] to String
- 8. scala convert String to generic type
- 9. Scala - convert Array [String] to Array [Double]
- 10. Scala Jackson Deserialize to String или Map
- 11. scala dataframe to RDD [array [String]]
- 12. Scala refactor string to Date code
- 13. Scala: Condense Array [(String, Array [Double])] to Array [(String)]
- 14. String to char to string
- 15. Prepend to String array
- 16. Python regex to string string
- 17. POST form to url string query
- 18. Perl convert url string to link
- 19. C# Byte [] to Url Friendly String
- 20. Convert JsDefined to String
- 21. Convert String [] [] to String []
- 22. String Array to String
- 23. Scala Random String
- 24. byte [] to String и String to byte []
- 25. Binary to string/string to binary
- 26. Bytes to String или String to Bytes?
- 27. javascript: String to Byte [] to String
- 28. Scala РДД [String] для РДА [String, String]
- 29. String to HtmlDocument
- 30. error get string to array string & string to array int
IMHO лучше иметь опцию [A] 'или' Try [A] 'для метода apply, потому что' новый URL-адрес может выйти из строя. – Dimitri