Защо новият обект Path на Java 7 не може да се релативизира, когато само един Path включва коренен елемент?

Според java.nio.file.Path:

Относителен път не може да бъде конструиран, ако само един от пътищата има основен компонент.

защо е така Защо не е възможно да се релативизира така:

Path path1 = Paths.get("/home/test");
Path path2 = Paths.get("home");

// throws an IllegalArgumentException
Path path3 = path1.relativize(path2);

Представях си, че path3 ще доведе до относителния път ../. Защо е валидно за Path да върне резултат, който предполага, че две директории се намират на едно и също ниво във файловата система, ако не са дефинирани коренни елементи, но когато само един път дефинира коренен елемент (както е показано по-горе), няма относителен път може да се определи?

i.e.

Path path1 = Paths.get("home/test");
Path path2 = Paths.get("user");

// results in ../../user
Path path3 = path1.relativize(path2);

person wulfgarpro    schedule 30.08.2011    source източник


Отговори (1)


Неабсолютният път е относителен към някаква неуточнена базова директория. Ако имате два такива пътя, ще има някакъв смисъл да си представите, че са относителни към същата (но все още неуточнена) базова директория и тогава има смисъл да попитате къде е единият по отношение на другия .

От друга страна, ако имате два пътя, от които само единият е абсолютен, като /home/test и home, не се знае каква е връзката. Например, ако основната директория е /home/test/blah, тогава home означава /home/test/blah/home и следователно трябва да се отнесе към blah/home. Но как методът ще разбере как да измисли blah (или да измисли нещо съвсем друго)?

Целият смисъл на използването на относителен път е да се каже, Все още не ви казвам каква ще бъде основната директория за този път. Очакването библиотеката по време на изпълнение да отгатне основния път, който изрично не й казваме, би било напълно в противоречие с тази семантика.

person hmakholm left over Monica    schedule 30.08.2011
comment
защо има "някакъв смисъл" да си представим, че са относителни към една и съща базова директория? Ами ако не са? - person wulfgarpro; 30.08.2011
comment
Може или не има смисъл да приемем, че в крайна сметка ще имат една и съща базова директория, дори ако все още не знаете каква е тя. Вие сте свободни да не използвате функцията, когато знаете, че не е така. От друга страна, няма особен смисъл да се предполага, че неабсолютен низ в крайна сметка ще бъде интерпретиран спрямо корена. Ако вече знаете каква ще бъде основата, вместо това работете с абсолютен път. От всички случаи, в които знаете каква ще бъде основата, тези, в които тя е конкретно /, са достатъчно редки, за да не го направят тихо предположение по подразбиране. - person hmakholm left over Monica; 30.08.2011