Что означает условное обозначение "of" на Java?

Как мы видим в Java 8, существует множество методов с именем "из", таких как Stream.of(), Optional.of() и многие библиотеки, такие как actorOf в Akka.

Что означает это "из"? Это английское слово "of" или аббревиатура для чего-то вроде "Factory Factory"?

Ответ 1

Да, это английское слово. Он обычно выбирается так, чтобы выражение читалось как английская фраза. Например, Stream.of(3, 4) должен выглядеть как "поток из трех и четырех", который похож на сокращенную версию "потока, который состоит из чисел три и четыре".

Ответ 2

Как обычно, если вы просматриваете классы-оболочки, все они содержат метод valueOf(XXX) для создания экземпляра класса-оболочки данного типа значений.

Integer.valueOf(int)
Double.valueOf(double)
Float.valueOf(float)

Java придерживается этого соглашения об именах с 1-го дня. Аналогично, большинство классов, введенных Java-8, содержат этот метод of(...).

Stream.of(...)
LocalDate.of(year, month, dayOfMonth)
Instant.ofEpochSecond(epochSecond)
and many more.

Есть не только valueOf или of доступных методов, то есть еще несколько методов, которые обслуживают конкретную цель или тип задачи внутри различных классов, и они назначили с лучшим подходящим именем, представляющее этой задачей.

  • parseXXX(): для синтаксического анализа заданного ввода строки. Примеры: Integer.parseInt(str), Double.parseDouble(), Date.parse(datestr) т.д.
  • get (field): получение информации о поле с объекта. Пример: Calendar.get(field), LocalDate.get(TemporalField) и т.д.
  • format(): Преобразование в другое представление. Пример: String.format(), SimpleDateFormat.format(), DateTimeFormatter.format() т.д.

Эти соглашения об именах широко используются в Java8 DateTime API. Ознакомьтесь с этими соглашениями об именах методов

Ответ 3

Это обычное соглашение об именах, используемое для статических заводских методов.

Джошуа Блох упоминает следующее о шаблоне и связанных соглашениях об именах в Effective Java (2nd Edition), пункт 1: Рассмотрите статические заводские методы вместо конструкторов (выделено мной):

... (a) Недостаток статических заводских методов заключается в том, что они не могут быть легко различимы с другими статическими методами. Они не выделяются в документации API так, как это делают конструкторы, поэтому может быть трудно понять, как создать экземпляр класса, предоставляющего статические заводские методы вместо конструкторов. Инструмент Javadoc может когда-нибудь обратить внимание на статические заводские методы. Тем временем вы можете уменьшить этот недостаток, обратив внимание на статические фабрики в комментариях к классу или интерфейсу, а также придерживаясь общих соглашений об именах. Вот несколько общих имен для статических заводских методов:

  • valueOf Возвращает экземпляр, который имеет, разумеется, то же значение, что и его параметры. Такие статические заводы фактически являются методами преобразования типов.

  • of -A краткой альтернативы valueOf, популяризированного EnumSet (пункт 32).

...

Так, как указывали другие, "из" означает английское слово "of" и не является аббревиатурой. Но одна из причин использования этого соглашения состоит в том, чтобы облегчить выяснение того, является ли класс стандартным методом, поскольку статические фабрики не отображаются в отдельном разделе в JavaDocs (по сравнению с конструкторами).

Дополнительным преимуществом, на мой взгляд, с использованием сжатых и дескриптивно названных статических фабрик является то, что он заставляет код читать как прозу, а это не так, если он завален new вызовами конструктора.