Замечание.
В общепринятом восприятии, интерфейс обычно должен содержать абстрактные методы и аналогом класса не может быть, т.к. вызвать абстрактный метод невозможно. Однако если методы интерфейса являются исключительно дефолтными и/или статическими, то интерфейс приобретает черты класса.
Path – это интерфейс, переработанный аналог класса File. Работать с ним значительно проще, чем с File:
во-первых, из него убрали многие статические методы, и перенесли их в класс Files;
во-вторых, в Path были упорядочены возвращаемые значения методов. В классе File методы возвращали то String, то boolean. Таким образом в File разобраться было непросто.
Например, в классе File существует метод getParent(), который возвращает путь для текущего файла в виде строки. Но при этом существует еще метод getParentFile(), который возвращал то же самое, но в виде объекта класса File. Это явно избыточно. Поэтому в интерфейсе Path метод getParent() и другие методы работы с файлами возвращают просто объект Path.
Во многих изданиях и лекциях путают Path с классом, но это интерфейс и с помощью его можно создать только ссылку, которой будет присваиваться адрес объекта.
К сожалению, возникает терминологическая путаница, т.к. ссылке типа интерфейса необходимо присвоить адрес объекта класса реализующего данный интерфейс, а такого класса нет.
Замечание.
Нельзя создать объект типа Path с помощью кода вида
new Path().
Возникает естественный вопрос, а как объявить и проинициализировать ссылку типа интерфейс в данном случае, т.к. вызвать какой-либо конструктор для инициализации объекта нельзя.
В случае создания ссылки типа Path, нужно воспользоваться его статическим методом of(). Формат создания ссылки:
Path имя = Path.of(путь);
где имя — это имя переменной типа Path; путь — это путь к файлу (или директории) вместе с именем файла (или директории) (Таблица 1).
Достарыңызбен бөлісу: |