Подтвердить что ты не робот

Java.nio.file: Где фактически реализован интерфейс Path?

Недавно я делал некоторую кодировку, используя пакет java.nio.file, представленный на Java 7, и увидел пример с использованием Path следующим образом:

Path path = Paths.get("C:\\Users");

Учитывая, что Path - это интерфейс, я был смущен тем, как вы могли бы ссылаться на него, однако после некоторых исследований я выяснил, что ссылка на интерфейс разрешена, но она должна указывать на класс, который реализует интерфейс. Глядя на это, я посмотрел класс Paths и увидел, что он не реализовал Path. Рассматривая исходный код, метод метода Paths.get имеет следующий вид:

public static Path get(String first, String... more) {
    return FileSystems.getDefault().getPath(first, more);
}    

метод сначала возвращает объект типа FileSystem (из абстрактного класса, я думаю), используя то, что, как мне кажется, называется статическим factory, но FileSystem также не реализует интерфейс.

Мой вопрос: кто-нибудь знает/может объяснить, где фактически реализован интерфейс Path, поскольку я не могу найти, где это происходит.

4b9b3361

Ответ 1

Если вы внимательно посмотрите, вы заметите, что метод getPath из FileSystem возвращает реализацию интерфейса Path. Вызывая FileSystems.getDefault(), вы получите реализацию интерфейса FileSystem, который будет зависеть от системы. В системе Linux вы получите объект LinuxFileSystem object witch extends UnixFileSystem.

Вы можете искать пример в классе UnixFileSystem из openjdk witch - это реализация интерфейса FileSystem.

Вот ссылка с реализацией метода getPath от UnixFileSystem, ведьма вернет экземпляр UnixPath.

Вы должны помнить, что реализация возврата FileSystems.getDefault зависит от операционной системы. Кроме того, исходный код этих классов недоступен в oracle jdk.

Ответ 2

Внутри среды IDE NetBeans вы можете просмотреть сведения о реализации класса Paths, выполнив следующие действия:

  • Шаг первый:

    наведите курсор на строку, в которой вы написали свой код пути. Пример Path:

Путь p = Paths.get( "someDir\someOtherDir" );

  • Шаг второй:

Нажмите "Отладка" | Шаг в (F7)

Он отобразит детали реализации Paths