Интерфейс не содержащий ни одного члена

360
04 февраля 2017, 08:17

Возможен ли интерфейс не содержащий ни одного члена и если да, какой практический смысл от такого интерфейса?

Answer 1

Да, возможен. Такие интерфейсы называют маркерными. Они нужны для индикации чего-либо JVM, компилятору или какой-либо библиотеке. Пустые они потому, что позволяют добавить некоторый признак/маркер/индикацию к типам, не меняя контракты этих типов.

В Джаве такими интерфейсами являются, например, Serializable и Cloneable. Существование Serializable позволяет сделать проверку "можно ли сериализовать этот объект" более типизированным образом, сведя ее к проверке "имплементирует ли этот объект интерфейс Serializable".

Заменой маркерным интерфейсам также могут служить аннотации (например, @ThreadSafe).

Интерфейс-маркер на Википедии.

Answer 2

Да, это возможно.

Существует шаблон, который называется интерфейс-маркер. Классы реализуют интерфейс не содержащий, ни одного метода. Это требуется для того, чтобы отметить определенные классы, с которыми в дальнейшим возможны, какие-то определенные действия.

Чтобы было понятнее, приведу пример. В стандартной библиотеке существует интерфейс java.lang.Cloneable. Он показывает, что переопределеный метод в классе java.lang.Object.clone() будет возвращать копию объекта данного класса.

READ ALSO
Java exit code -1073740791

Java exit code -1073740791

Столкнулся с проблемой, при компиляции приложения libgdx, приложение не открывает окно, а завершается с сообщением Process finished with exit code -1073740791 (0xC0000409)...

872
TelephonyDevController not yet created?

TelephonyDevController not yet created?

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

426
Как узнать установлен ли WhatsApp?

Как узнать установлен ли WhatsApp?

Как узнать установлен ли на телефоне WhatsApp не вызывая startActivity?

723
HashCode у класса String в Java

HashCode у класса String в Java

Разбирался я тут со строками и на одном ресурсе прочитал следующий тезис:

424