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, поскольку я не могу найти, где это происходит.
Ответы
Ответ 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, выполнив следующие действия:
Путь p = Paths.get( "someDir\someOtherDir" );
Нажмите "Отладка" | Шаг в (F7)
Он отобразит детали реализации Paths