Java нарушает свои собственные правила с помощью методов установки, которые имеют не возвращаемые типы возврата? - PullRequest
1 голос
/ 20 февраля 2020

Мне дали понять, что стандартным соглашением было, чтобы сеттеры ничего не возвращали. Тем не менее, API NIO.2 имеет несколько методов, таких как setOwner, setLastModifiedTime и setAttribute, которые возвращают экземпляры Path. Разве эти методы не являются истинными установщиками, или же не все установщики должны иметь пустые возвращаемые типы?

Ответы [ 2 ]

7 голосов
/ 20 февраля 2020

устаревший стандарт JavaBean (который должен был помочь с инструментами, позволяющими автоматически обрабатывать JavaBeans), возможно, говорил что-то о установщиках пустот, но Fluent Builder нацелен на создание все проще.

Разрешение цепочки методов делает код более приятным, и поскольку нет веских причин требовать void тип возвращаемого значения от сеттеров, они решили получить с помощью программы ( нет, они не видят комментарии):

path.setOwner(foo).setLastModifiedTime(bar).setAttribute(baz);

JDK имеет примеры свободного интерфейса в таких классах, как StringBuilder и ProcessBuilder, но они избегают использования номенклатуры setXXX (возможно, чтобы избежать путаница) даже когда это имело бы смысл. StringBuilder.append() очевидно, не назвали бы setMoreText(), но ProcessBuilder.directory(File) менее очевидно, чем setWorkingDirectory(File) ИМХО.

1 голос
/ 20 февраля 2020

Сеттер обычно используется в качестве метода доступа для изменения состояния объекта. Как упомянул Каяман, было бы полезно возвращать сам объект для создания плавного API вместо void - при работе с этими объектами воспринимайте его как синтаксический сахар.

Тем не менее, в случае NIO это статический c метод класса «Файлы», который изменяет состояние пути, заданного в качестве первого аргумента, поэтому в данном случае это не метод доступа, а «обычный» метод с именем «set».

...