URL은

2013-04-24 5 views
0

객체 나 유사한 값을 입력 String의 필드를 포함하는 객체를 가지고 "http://stackoverflow.com"URL은

나는 URL를 수행해야하는 방법이있다. 그래서

(... 분명히 시도 캐치에 싸여 될 필요가 있음) String에서 URL를 구축 한 후 String 소요되며, 방법에 그것을 포장하고 간단한 방법이 있어야 것 같습니다. String이 아닌 URL으로 내 값을 개체에 저장할 수 있습니까? 나는 이것을 시도했다 public URL url = "http://stackoverflow.com";

그 선을 따라 무엇인가 할 수 있습니까? 원래 내가 한 것보다 더 좋은 방법이 있습니까?

덕분에 원래

:

public String urlString = "http://stackoverflow.com"; 


public boolean myMethod(String urlString) { 
try { 
     URL newURL = new URL(urlString); 
     useUrl(newURL); 
} catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } 

} 

않아요 작업,하지만 더 나은 것 같다

public URL url = "http://stackoverflow.com"; 


public boolean myMethod(URL url) { 
     useUrl(url); 
    } 

답변

0

자바는 문자열이 URL로 변환 될 때까지 URL로 변환 될 수 없다는 것을 알지 못하기 때문에 예외 처리가 필요합니다.

은 아마 당신이 정말로 원하는 것은 :

static URL URLofString(String s){ 
URL r=null; 
try { 
    r= new URL("http://stackoverflow.com"); 
    } catch (MalformedURLException e) { } 
    return r; 
} 

다음

final static URL myURL=URLofString("http://stackoverflow.com"); 

자바 8, 당신은 람다를 사용할 수 있습니다, 그것은 부족하게 더 나은 있지만 :

final static URL myURL =()->{ 
    URL r=null; 
    try { r= new URL("http://stackoverflow.com"); } 
    catch (MalformedURLException e) { } return r;}; 
3

자바 암시 적 변환을 지원하지 않습니다. 다른에 하나 개의 유형을 설정하려는 경우

final URL url = new URL("http://stackoverflow.com/"); 

처럼 명시 적으로해야 할 당신이 생성자에게

private static final URL url = getUrl("http://stackoverflow.com/"); 

private static URL getUrl(String spec) { 
    try { 
     return new URL(spec); 
    } catch (MalformedURLException e) { 
     throw new AssertionError(e); 
    } 
} 

같은 도우미 방법이 필요하거나 사용할 수 있도록 그러나이 체크 예외를 throw

private final URL url; 

public MyClass(String spec) throws MalformedURLException { 
    url = new URL(spec); 
} 
+0

여전히 슈퍼 생성자가 던진 예외를 처리 할 수 ​​없다는 것을 알려줍니다. –

+0

이므로 생성자의 throws 절에 추가해야합니다. –

0

내가 원하는 것을 이해했는지는 확실하지 않지만 도움이됩니까?

class SomeClass { 
    private final String urlString = "http://stackoverflow.com"; 
    public URL url; 

    public SomeClass() { 
    try { 
     this.url = new URL(this.urlString); // suppose the URL is correct 
    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } 
    } 
} 
+1

그래, 그게 내가 이미하고있는거야. 그러나 나는 단지 생각하고 있었다, 나는이 경우에만 URL을 사용한다. String으로 사용할 필요가 없으므로 String으로 저장 한 다음 추가 선을 try/catch로 감싸서 변환해야합니다. URL로만 저장할 수 있다면 문제가 해결됩니다. –

0

약간 줄일 수 있지만 새 URL 개체를 만들어야합니다.

public boolean myMethod(String urlString) { 
try { 

     useUrl(new URL(urlString)); 
} catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } 

} 
0

약간의 추가 마법을 위해 Spring과 Apache 내의 URIBuilder를 살펴볼 수 있습니다.

URIBuilder uriBuilder = URIBuilder.fromUri("http://stackoverflow.com/"); 
URI uri = uriBuilder.build(); 
+0

URI uri = 새로운 URI ("http://stackoverflow.com/"); –

+1

주로 uriBuilder.queryParams() 메소드 용입니다. MultiValueMap을 가져오고 추가 된 쿼리 매개 변수를 쉽게 만듭니다. – Dan

0

당신은 그렇게 할 수 없습니다. URL은 정의에 의해 형식이 잘못 될 수 없습니다. 따라서 문제가 try/catch를 피하는 것이면 URL 대신 String을 사용해야하며 필요한 경우 내부적으로 URL으로 변환해야합니다.

private class UnsafeURL { 
    private String url; 

    public UnsafeURL(String url){ 
     this.url = url; 
    } 

    public URL toURL() throws MalformedURLException { 
     return new URL(url); 
    } 
} 
0
public class Foo { 

    private URL test; 
    { 
     try { 
      test = new URL("http://www.google.com"); 
     } catch (MalformedURLException e) { 
      throw new RuntimeException(e); 
     } 
    } 
    public Foo() { 

    } 
} 

또는

public class Foo { 

    private URL test; 

    public Foo() { 
     try { 
      test = new URL("http://www.google.com"); 
     } catch (MalformedURLException e) { 
      throw new RuntimeException(e); 
     } 
    } 
} 

중 하나가 작동합니다

는 안전하게 URL로 변환 할 수있는 새로운 객체를 생성 할 수 있습니다. 가장 좋은 방법은 생성자에서 수행하는 것입니다.