2013-11-18 1 views
6

Я думаю, что название говорит все. Как мне указать FOLLOW_LINKS? Зачем создавать перечисление только одним способом? Например, метод java.nio.file.Files.getLastModifiedTime (Path, LinkOption ...) принимает массив LinkOption-s как аргумент. Вы должны что-то передать, но вы можете передать только один вариант. Это меня удивило, и я хотел бы узнать больше об этом.Java 7 - LinkOption - почему NOFOLLOW_LINKS единственный доступный вариант?

+2

Конечно, разрешение произвольного количества опций позволяет будущим расширениям без необходимости изменять API. – Holger

ответ

3

Следующие ссылки являются поведением по умолчанию. I.e., если вы не укажете NOFOLLOW_LINKS, тогда будут выполняться ссылки.

Из documentation в Files.getLastModifiedTime() метода (курсив мой):

Массив параметров может использоваться для указания, как символические ссылки обрабатываются в случае, если файл является символической ссылкой. По умолчанию используются символические ссылки и считывается атрибут файла конечной цели ссылки. Если присутствует опция NOFOLLOW_LINKS, то символьные ссылки не выполняются.

+0

Да, я понял, что через некоторое время, оглядываясь на другие области nio, я обнаружил: «При копировании символической ссылки копия ссылки копируется. Если вы хотите скопировать ссылку, а не содержимое ссылки, укажите параметр NOFOLLOW_LINKS или REPLACE_EXISTING. " что объясняет наличие перечисления LinkOption. Я не знаю, почему я раньше не проверял документы для Files.getLastModifiedTime(). –

+0

Кажется, было бы полезно, если бы в документации 'LinkOption' упоминалось, что следующие ссылки - это поведение по умолчанию для вызовов, в которых используется' LinkOption'. – matts

+0

Другая проблема заключается в том, что когда я смотрел на javadocs для getLastModifiedTime(), я не читал «резюме резюме» наверху, просто подпрыгнул прямо в раздел «Параметры», и все это говорит о том, что есть «опции - варианты, указывающие, как символические ссылки обрабатываются »И поэтому я не мог понять, почему мой единственный вариант, похоже, НЕ следует символическими ссылками. Все ясно сейчас :-) Спасибо –

1

Что меня немного смущает, что аргумент LinkOptions для Files.exists() является аргументом vararg, факт, который я не сразу узнал ... вы можете просто оставить его. Исключение составляет значение null.

Смежные вопросы