2014-12-21 4 views
3

Scala 클래스에는 URL이 필요합니다. String 클래스를 사용할 수는 있지만 Java의 URL 유효성 검사 기능을 원합니다. Java Url 클래스 또는 String을 사용할 수있게하는 가장 좋은 방법은 무엇입니까? 그리고 문자열 인 경우이를 Java URL로 변환하는 가장 좋은 방법은 무엇입니까? 이것은 당신이 어쨌든 원하는 것입니다스칼라 - 문자열을 URL로

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)) 
} 

답변

5

당신은 오버로드 된 생성자 또는 apply 방법을 사용할 수 있습니다). 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 추가로 필요할 수 있습니다).

덜 암시 적 접근 방식이 될 것 같은, StringtoURL 방법을 "추가"@ MZ 년대에

import Helpers._ 
val aUrl = "http://google.com".toURL 

비교 :이의

object Helpers { 
    implicit class String2URL(s: String) { 
    def toURL = new URL(s) 
    } 
} 

사용이 같을 것이다 답 : 여러 매개 변수를 조합하여 여러 매개 변수를 조합하지 않고도 여러 매개 변수를 조합 할 수 있습니다. 반면에 해당 응답의 경우 지수가 작습니다 (이 경우 1과 같이 작은 지수의 경우 완벽하게 괜찮습니다). @ m-z의 대답은 재사용 할 수 없으며 다른 수업이 필요하면 다시 작성해야합니다. 라이브러리 측면에서 작동하므로 lib 사용자는 멋진 설명서를 얻고, 사용 방법을 안내하고, 광산은 "마법"및/또는 작은 사용자 도움말 (import, 메서드 toURL 변환 방법 호출)과 함께 작동합니다. 특히 @Option 또는 Try의 조정으로 @m-z의 작은 조합에 대한 솔루션을 선택합니다. 그러나 여러 매개 변수에 과부하가 필요한 경우 솔루션이 더 잘 작동한다고 생각합니다. 실제로 사용 사례에 따라 다릅니다. (전달 된 URL이 유효하지 않은 경우에도 Try으로 광산을 감쌀 수 있습니다.)

+2

IMHO 적용 방법에 대해'Option [A]'또는'Try [A] 새 URL'이 실패 할 수 있습니다. – Dimitri

4

당신은 (URLString에서 암시 적 변환을 만들 만 URL을 받아 들일 수 :

관련 문제