2017-02-14 3 views

答えて

2

技術的に可能です。たとえば、このプログラムを考えてみます。

import java.io.File; 
import java.net.MalformedURLException; 
import java.net.URL; 

public class Test { 
    public static void main(String[] args) throws MalformedURLException { 
     URL.setURLStreamHandlerFactory(protocol -> { 
      throw new UnsupportedOperationException(); 
     }); 

     System.out.println(new File("/etc/passwd").toURI().toURL()); 
    } 
} 

ここtoURL呼び出しは、実際にMalformedURLExceptionで失敗します。

Exception in thread "main" java.net.MalformedURLException 
    at java.net.URL.<init>(URL.java:627) 
    at java.net.URL.<init>(URL.java:490) 
    at java.net.URL.<init>(URL.java:439) 
    at java.net.URI.toURL(URI.java:1089) 
    at com.example.Test.main(Test.java:20) 
Caused by: java.lang.UnsupportedOperationException 
    at com.example.Test.lambda$main$0(Test.java:17) 
    at java.net.URL.getURLStreamHandler(URL.java:1142) 
    at java.net.URL.<init>(URL.java:599) 
    ... 4 more 

私はあなたにもfileをサポートしていないカスタムURLStreamHandlerFactoryを設定した場合、プログラムはとにかく正しく機能することを疑うがスキーム。

デフォルトでは、toURLが失敗する可能性があるので、私は考えることも思い出せません。URLStreamHandlerFactoryを混乱させないと、安全に使うことができます。

public class FileUtils { 
    public static URL toURL(File file) { 
     try { 
      return file.toURI().toURL(); 
     } catch (MalformedURLException e) { 
      throw new InternalError(e); 
     } 
    } 
} 

を、どこでもそれを使用する:あなたは、多くの場合、URLオブジェクトを生成する必要がある場合は

、あなたはこのようないくつかのユーティリティメソッドを作成することを検討します。プログラムではMalformedURLExceptionが不可能であると主張しているので、実際に発生すると内部プログラムエラーとみなされます。

もう1つの可能性は、URLクラスをまったく使用しないことです。多くの目的のために、代わりにURIクラスを使用することができます。

+0

答えを読む前に、私は 'URL.setURLStreamHandlerFactory()'について知りませんでした。優れた。 – kevinarpe

関連する問題