Что означает условное обозначение "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
вызовами конструктора.