Метки интерфейсов в Java

От C++ 11 стандартов, 2.6/ Alternative tokens:

  1. Альтернативные маркерные представления обеспечиваются для некоторых операторов и punctuators.
  2. Во всех отношениях языка, каждый альтернативный маркер ведет себя то же, соответственно, как его первичный маркер, за исключением его написания. Набор альтернативных маркеров определяется в Таблице 2 Таблицы 2.

- Альтернативные маркеры

alternative primary | alternative primary | alternative primary
--------------------+---------------------+--------------------
   <%          {    |    and         &&   |    and_eq      &=
   %>          }    |    bitor       |    |    or_eq       |=
   <:          [    |    or          ||   |    xor_eq      ^=
   :>          ]    |    xor         ^    |    not         !
   %:          #    |    compl       ~    |    not_eq      !=
   %:%:        ##   |    bitand      &    |
9
задан thrau 9 February 2014 в 00:37
поделиться

6 ответов

Потому что иногда действительно имеет смысл использовать какое-то свойство типа в качестве самого типа - на ум приходит Serializable . Если я сделаю такой метод:

public void save(Object data){ ... }

... вы действительно не знаете, как эти данные будут сохранены. Сериализация ВМ? Сериализация свойств bean-компонентов? Какая-то самодельная схема? Тогда как если вы напишете это так:

public void save(Serializable data){ ... }

... это довольно ясно (если бы только разработчик ObjectOutputStream использовал эту возможность!). Иногда имеет смысл использовать аннотации, когда вы хотите добавить метаданные к типам, но в этом случае я бы поспорил за интерфейс тегов.

5
ответ дан 4 December 2019 в 11:43
поделиться

Интерфейс тегов обычно связан с неким волшебством: либо непосредственно встроенным в виртуальную машину, либо с использованием отражения. Поскольку магия технически может применяться к любому классу, вы используете теги, чтобы указать, что вы хорошо думаете о магии и применима ли она к вашему классу.

6
ответ дан 4 December 2019 в 11:43
поделиться

Вопрос об интерфейсах маркеров и аннотациях обсуждается в книге Блоха «Эффективная Java», и часть этого раздела доступна в книгах Google здесь

6
ответ дан 4 December 2019 в 11:43
поделиться

Он использовался для упоминания некоторого свойства класса (например, Serializable показывает, что классу разрешено сериализоваться). Теперь аннотации могут выполнять эту работу.

1
ответ дан 4 December 2019 в 11:43
поделиться

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

0
ответ дан 4 December 2019 в 11:43
поделиться

Вы можете пометить свой класс интерфейсом тегов, чтобы сообщить своему коллеге-разработчику и потребителю вашего класса, что вы явно поддерживаете эту функциональность. Подумайте о Serializable; кто-то, кому нужно сохранить сеанс и для этого использует сериализацию, может безопасно использовать объект вашего класса.

В дальнейшем его можно использовать при отражении; в настоящее время для этого широко используются аннотации, но в былые времена вы могли проверить класс, проверить, реализует ли он определенный интерфейс (например, DAO), и, если да, обработать объект дальше (я думаю об аннотации Entity здесь ).

0
ответ дан 4 December 2019 в 11:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: