11

URI javadocによると、このgetPathメソッドは「この URI のデコードされたパス コンポーネント、またはパスが未定義の場合は null 」を返します(強調を追加)。これにより、アプリケーションが の戻り値に依存している場合、getPathそれが であるかどうかを確認する必要があるかもしれないと考えるようになりますnull。しかし、これは決して起こらないようです。

URI次のコードは、nullを返すオブジェクトを構築しようとした私の試みを示してgetPathいますが、ご覧のとおり、そのようなケースはまだ見つかっていません。誰かがこれがどのように起こるか説明してもらえますか?

編集: mailtoURI にはパスがないことに気付きました。しかし、私が本当に求めているのは、http、https、ftp、または未定義/null パスを持つファイル スキームを使用する URI はあり得るかということです。

import java.net.URI;
import java.net.URISyntaxException;

public class URIGetPathNullTest {

    public static void main(String []args) throws Exception {
        test1();
        test2();
        test3();
        test4();
        test5();
        test6();
        test7();
    }


    public static void test1() throws URISyntaxException {
        String urlString = "";
        URI uri = new URI(urlString);
        printUri(uri); 
        // Output:
        //  toString() --> 
        //  getPath --> 
        //  getPath null? false         
    }

    public static void test2() throws URISyntaxException{
        String scheme = null;
        String ssp = null;
        String fragment = null;
        URI uri = new URI(
                scheme,
                ssp,
                fragment
            );
        printUri(uri);       
        // Output:
        //  toString() --> 
        //  getPath --> 
        //  getPath null? false
    }

    public static void test3() throws URISyntaxException {
        String scheme = null;
        String userInfo = null;
        String host = null;
        int port = -1;
        String path = null;
        String query = null;
        String fragment = null;
        URI uri = new URI(
                scheme,
                userInfo,
                host,
                port,
                path,
                query,
                fragment             
            );
        printUri(uri);       
        // Output:
        //  toString() --> 
        //  getPath --> 
        //  getPath null? false

    }

    public static void test4() throws URISyntaxException {
        String scheme = null;
        String host = null;
        String path = null;
        String fragment = null;
        URI uri = new URI(
                scheme,
                host,
                path,
                fragment             
            );
        printUri(uri);       
        // Output:
        //  toString() --> 
        //  getPath --> 
        //  getPath null? false
    }

    public static void test5() throws URISyntaxException {
        String scheme = null;
        String authority = null;
        String path = null;
        String query = null;
        String fragment = null;
        URI uri = new URI(
                scheme,
                authority,
                path,
                query,
                fragment             
            );
        printUri(uri);       
        // Output:
        //  toString() --> 
        //  getPath --> 
        //  getPath null? false
    }

    public static void test6() throws URISyntaxException {
        String urlString = "?some-query";
        URI uri = new URI(urlString);
        printUri(uri); 
        // Output:
        //  toString() --> ?some-query
        //  getPath --> 
        //  getPath null? false         
    }

    public static void test7() throws URISyntaxException {
        String urlString = "#some-fragment";
        URI uri = new URI(urlString);
        printUri(uri); 
        // Output:
        //  toString() --> #some-fragment
        //  getPath --> 
        //  getPath null? false         
    }

    public static void printUri(URI uri) {
        System.out.println("toString() --> " + uri.toString());
        System.out.println("getPath --> " + uri.getPath());
        System.out.println("getPath null? " + (uri.getPath() == null));
    }
}
4

1 に答える 1